home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / e / 2b_CrtvE_src.lha / compiler.s < prev    next >
Text File  |  2001-07-09  |  71KB  |  3,342 lines

  1. ;; COMPILER
  2. ; ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ;
  3. ;   The COMPILER Part !!!!!!                ;
  4. ; ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ;
  5.  
  6.  
  7. ; compile main vars
  8.  
  9. COMPILEPROC:    DC.L    0
  10. PROCMASK:   DC.W    0   ; ONE .L
  11. PROCMASKREV:    DC.W    0   ;
  12. SCOPE:      DC.W    0   ; <>0 --> LOCAL
  13. CURLABNAME: DC.L    FOFF
  14. LABPRES:    DC.L    0
  15. LABPRES2:   DC.L    0
  16. VAROFFSET:  DC.W    0
  17. VARNO:      DC.W    0
  18. PROCF:      DC.W    0
  19. FLAG:       DC.W    0
  20. CURIDENTREC:    DC.L    0   ; IDENTPTR STRUCT
  21. NRLOC:      DC.W    0   ; LINK
  22. NRARG:      DC.W    0   ; RTD
  23. TYPELAB:    DC.W    0   ; 0-3
  24. COMPMESSY:  DC.B    'parsing and compiling ...',10
  25. ENDCOMPMESSY:   EVEN
  26.  
  27. PASS1:
  28.  
  29.     MOVE.W  #-1,EXPORTFLAG
  30.     BTST    #6,CODEPREFS+2
  31.     BNE.S   .EA
  32.     CLR.W   EXPORTFLAG
  33. .EA:    MOVE.W  #9,CURSPOT
  34.     BTST    #7,CODEPREFS+2
  35.     BNE.S   .1
  36.     MOVE.L  #COMPMESSY,D2
  37.     MOVE.L  #ENDCOMPMESSY-COMPMESSY,D3
  38.     BSR WRITECON
  39. .1: CLR.W   LINEWRITE
  40.     CLR.W   LINENUM
  41.     LEA CURINTERIM(PC),A0
  42.     MOVE.L  8(A0),(A0)
  43.     MOVE.L  CURINTERIM(PC),A0
  44. COMPILELINE:
  45.     MOVE.L  CURACODE(PC),A4
  46.     MOVE.L  ESTACK(PC),A5
  47.     MOVE.L  CURINTERIM(PC),A3
  48.     MOVEQ   #5,D0
  49.     BSR ADDLABEL
  50.     MOVE.W  #2,ERRWHERE
  51. COMPILELOOP:
  52.     BSR WRITELINENUM        ; TRASHES D7
  53.  
  54.     MOVE.W  (A3)+,D7
  55.     CMP.W   #-1,D7
  56.     BEQ.S   COMPILEOUTS
  57.     CMP.W   #21,D7
  58.     BNE ERROR12
  59.     MOVE.W  (A3)+,D7
  60.     MOVE.L  A3,INTERMED
  61.     TST.L   LINEBUF
  62.     BEQ.S   .1
  63.     CMP.W   LINENUM(PC),D7
  64.     BEQ.S   .1
  65.     MOVE.W  D7,LINENUM
  66.     JSR ADDLINEDBG
  67. .1: MOVE.W  D7,LINENUM
  68.     MOVE.W  (A3)+,D7
  69.     BSR DOINSMAIN
  70.     MOVE.L  A4,CURACODE
  71.     JSR CHECK3
  72.     BRA.S   COMPILELOOP
  73. COMPILEOUTS:
  74.     TST.W   PROCF
  75.     BNE ERROR9
  76.     MOVE.L  A5,ESTACK
  77.     MOVE.L  A3,CURINTERIM
  78.     MOVE.W  #-1,LINENUM
  79.     BSR LINKDATA
  80.     MOVE.L  A4,CURACODE
  81.     RTS
  82.  
  83. LINKDATA:
  84.     LEA STRINGLINK,A6
  85. .XL:MOVE.L  (A6),A6
  86.     MOVE.L  A6,D0
  87.     BEQ.S   .X
  88.     MOVEQ   #0,D0
  89.     MOVE.W  4(A6),D0
  90.     BSR ADDLABEL
  91.  
  92.     LEA 6(A6),A5
  93. .L2:    MOVE.L  (A5)+,A3
  94.     MOVE.W  -2(A3),D0
  95.     MOVE.L  A4,A0
  96.     LSL.W   #1,D0
  97.     ADD.W   D0,A0
  98.     MOVE.L  A0,CURACODE
  99.     JSR CHECK3
  100.     MOVE.W  -4(A3),D0
  101.     BEQ.S   .NC
  102.     SUBQ.W  #1,D0
  103. .CL:    MOVE.B  (A3)+,(A4)+
  104.     DBRA    D0,.CL          ; WAS A BNE LOOP!
  105. .NC:    MOVE.L  (A5),D7
  106.     MOVE.L  D7,A5
  107.     BNE.S   .L2
  108.     CLR.B   (A4)+
  109.  
  110.     BRA.S   .XL
  111. .X: MOVE.L  A4,D0
  112.     BTST    #0,D0
  113.     BEQ.S   .1
  114.     CLR.B   (A4)+
  115. .1: RTS
  116.  
  117.  
  118. DOINSMAIN:            ; FIRST INTERIM IN D7
  119.     CMP.W   #IOFF+59,D7
  120.     BEQ.S   .1
  121. .2: BSR DOINS
  122.     TST.W   (A3)+
  123.     BNE ERROR12
  124. .3: BTST    #6,CODEPREFS+2
  125.     BEQ.S   .EA
  126.     RTS
  127. .EA:    CLR.W   EXPORTFLAG
  128.     RTS
  129. .1: MOVE.W  #-1,EXPORTFLAG
  130.     MOVE.W  (A3)+,D7
  131.     BEQ.S   .3
  132.     BRA.S   .2
  133.  
  134. EXPORTFLAG:   DC.W    0
  135. FLTFLAG:      DC.W    0
  136. DEFFLAG:      DC.W    0
  137. HANDLEFLAG:   DC.W    0
  138.  
  139. DOINS:
  140.     TST.W   SCOPE
  141.     BEQ.S   .2
  142.     TST.W   DEFFLAG
  143.     BNE.S   .DH
  144. .DHB:
  145.     CMP.W   #$100,D7        ; in procs part
  146.     BPL DOASM
  147.     CMP.W   #48,D7
  148.     BEQ PPCDOASM
  149.     CMP.W   #IDENT,D7       ; BECOMES+LABEL:
  150.     BEQ DOLAB
  151.     CMP.W   #32,D7
  152.     BEQ PTRCOMPLEX
  153.     BTST    #3,CODEPREFS+3
  154.     BEQ.S   .1
  155.     CMP.W   #IOFF+20,D7
  156.     BMI ERROR32
  157.     CMP.W   #IOFF+23,D7
  158.     BPL ERROR32
  159. .1: CMP.W   #IOFF,D7
  160.     BPL DOJOB
  161.     BRA DOEXP
  162. .2: CMP.W   #IOFF+16,D7     ; in global part
  163.     BEQ DOJOB
  164.     CMP.W   #IOFF,D7
  165.     BEQ DOJOB
  166.     CMP.W   #IOFF+48,D7
  167.     BEQ DOJOB
  168.     BRA ERROR35
  169. .DH:    CMP.W   #IOFF+17,D7
  170.     BEQ.S   .DHB
  171.     CLR.W   DEFFLAG         ; FIRST STATEMENT AFTER DEF'S
  172.     TST.W   HANDLEFLAG
  173.     BEQ .DHB
  174.     BSR HANDLEPROCREALLY
  175.     BRA .DHB
  176. DOINSOUT:
  177.     RTS
  178.  
  179. DOEXP:
  180.     TST.W   PROCF
  181.     BNE.S   .1
  182.     BSET    #6,WARNINGS+3       ; CODE OUTSIDE PROCS
  183. .1: MOVE.W  #1,EXPSTAT
  184.     MOVE.W  D7,-(A3)
  185.     BSR EXP
  186.     CLR.W   EXPSTAT
  187.     BRA.S   DOINSOUT
  188.  
  189. EXPSTAT:  DC.W    0
  190.  
  191. DOASM:
  192.     BSR ASM_COMPILE     ; WITH D7
  193.     BRA.S   DOINSOUT
  194.  
  195. PPCDOASM:
  196.     BSR PASM_COMPILE
  197.     BRA     DOINSOUT
  198.  
  199. DOJOB:
  200.     BSR.S   DOKEYWORD
  201.     BRA DOINSOUT
  202.  
  203. STOPJOB:              ; END JOBCODE PROCESSING
  204.     LEA .1(PC),A2
  205.     RTS
  206. .1: DC.W    0
  207.  
  208. DOKEYWORD:
  209.     SUB.W   #IOFF,D7
  210.     ASL.W   #2,D7
  211.     LEA INSJOBTAB,A2
  212.     MOVE.L  0(A2,D7.W),A2
  213. JOBLOOP:
  214.     MOVE.W  (A2)+,D7
  215.     TST.W   D7
  216.     BEQ.S   JOBOUT
  217.     ASL.W   #2,D7
  218.     LEA JOBROUTTAB(PC),A0
  219.     MOVE.L  (A0,D7.W),A0
  220.     JMP (A0)
  221. JOBOUT:
  222.     RTS
  223.  
  224.  
  225. DOBECOMESMETHOD:
  226.     CMP.W   #42,6(A3)
  227.     BEQ DOEXP
  228. DOBECOMES:
  229.     MOVE.L  (A3)+,A1
  230.     MOVE.L  A1,EAIDENT
  231.     CMP.W   #ASSGN,(A3)
  232.     BNE COMPLEXBECOMES
  233.     MOVE.B  4(A1),D2
  234.     BEQ ERROR22
  235.     CMP.B   #LAB,D2
  236.     BEQ ERROR6
  237.     ADDQ.L  #2,A3
  238.  
  239.     move.l  a4,-(a7)
  240.     MOVE.W  #17,EAREQUEST
  241.     BSR EAEXP
  242.     move.l  (a7)+,a2            ; a2 now - output code before expression
  243.     TST.L   D0
  244.     BNE.W   .OPT
  245.     BTST    #2,ICODEPREFS+3
  246.     BNE     .SKdupa
  247.  
  248.     TST.L   LAST_CMD_ADR        ; see if we can optimize
  249.     beq     .SKdupa
  250.     move.l  LAST_CMD_ADR,a0
  251.     move.l  a4,d0
  252.     sub.l   a0,d0
  253.     cmp.l   #4,d0
  254.     bne     .SK1
  255.     btst    #1,CODEPREFS
  256.     beq     .SK1
  257.     cmp.l   #$F2006400,(a0)
  258.     bne     .SK1
  259.     subq.l  #4,a4
  260.     move.l  a4,d0
  261.     sub.l   a2,d0
  262.     cmp.l   #8,d0
  263.     beq     .OPTI8
  264. .O8B:
  265.     move.w  .F1,(a4)+
  266.     move.l  a4,d1
  267.     jsr     GVA1D0_0
  268.     cmp.l   a4,d1
  269.     beq     .SK0
  270.     move.w  -(a4),d0
  271.     move.w  .F1+2(pc),(a4)+
  272.     move.w  d0,(a4)+
  273.     bra     .OPT
  274. .SK0:
  275.     move.w  .F1+2(PC),(A4)+
  276.     bra     .OPT
  277. .SK1:
  278.     cmp.w   #6,d0
  279.     bne     .SK2
  280.     cmp.w   #$203c,(a0)
  281.     bne     .SK2
  282.     move.l  a0,a4
  283.     move.l  2(a4),-(a7)
  284.     move.w  #$2b7c,(a4)+
  285.     move.l  a4,a2
  286.     JSR     GVA1D2_9
  287.     moveq   #0,d2
  288.     cmp.l   a4,a2
  289.     beq     .SK1S
  290.     move.w  -(a4),d2
  291.     move.l  (a7)+,(a4)+
  292.     move.w  d2,(a4)+
  293.     bra     .OPT
  294. .SK1S:
  295.     move.l  (a7)+,(a4)+
  296.     bra     .OPT
  297.  
  298.  
  299. .SK2:
  300. .SKdupa:
  301.     MOVE.W  .1(PC),(A4)+
  302.     JSR GVA1D2_9
  303. .OPT:   BRA DOINSOUT
  304. .1: MOVE.L  D0,2(A5)
  305. .F1:fmove.s fp0,4(a5)
  306. .F2:fsmove.s #0,fp0
  307. .F3:fmove.s #0,fp0
  308. .2: move.l  #0,2(a5)
  309. .OPTI8:
  310.     MOVE.L  .F2,d0
  311.     cmp.l   (a2),d0
  312.     bne     .O82
  313.     bra     .O8
  314. .O82:
  315.     MOVE.L  .F3,d0
  316.     cmp.l   (a2),d0
  317.     bne     .O8B
  318. .O8:
  319.     subq.l  #8,a4
  320.     move.l  4(a4),d0
  321.     move.w  .2,(a4)+
  322.     move.l  a4,a2
  323.     jsr     GVA1D2_9
  324.     cmp.l   a4,a2
  325.     bne     .O8X
  326.     move.l  d0,(a4)+
  327.     bra     .OPT
  328. .O8X:
  329.     move.w  -(A4),d2
  330.     move.l  d0,(a4)+
  331.     move.w  d2,(a4)+
  332.     bra     .OPT
  333. ;COMPLEXEXP:
  334. ;    move.l  (a3)+,a1
  335. ;    move.l  a1,EAIDENT
  336. ;    move.w  (a3)+,-(a7)
  337. ;    addq.l  #2,a3
  338. ;    BSR EXP
  339. ;    move.w  (a7)+,d0
  340. ;    subq.w  #7,d0
  341. ;    lsl.w   #2,d0
  342. ;    move.l  EAIDENT(PC),A1
  343. ;    lea     .C0(PC),A0
  344. ;    move.w  0(a0,d0),(a4)+
  345. ;    jsr GVA1D2_0
  346. ;    bra DOINSOUT
  347. .;C0:add.l   d0,4(a5)
  348. ;    sub.l   d0,4(a5)
  349. ;
  350.  
  351.  
  352. PTRCOMPLEX:           ; uses a0,d0
  353.     SUBQ.L  #2,A3
  354.     MOVE.L  A3,A0
  355.     BRA.S   COMPLEXST
  356. COMPLEXBECOMES:
  357.     LEA -6(A3),A0
  358. COMPLEXST:
  359.     MOVE.L  A0,-(A7)        ; complexstart -->STACK (D7)
  360.     BSR EATLEXP
  361.     BSR EXP
  362.     MOVE.L  (A7)+,D7
  363.     MOVE.L  A3,-(A7)        ; complexend -->STACK
  364.     MOVE.L  D7,A3
  365.     MOVEQ   #2,D0
  366.     BSR EADDRESSMODI
  367.     CMP.W   #ASSGN,(A3)+
  368.     BNE ERROR2
  369.     MOVE.L  (A7)+,A3
  370.     BRA DOINSOUT
  371.  
  372.  
  373. NOASSIGN:
  374.     MOVE.L  A0,A3           ; FROM COMPLEXST
  375.     BSR EXP
  376.     BRA DOINSOUT
  377.  
  378. EATLEXP:              ; uses d0
  379.     MOVE.W  (A3)+,D0
  380.     BEQ .3
  381.     CMP.W   #IDENT,D0
  382.     BEQ.S   .1
  383.     CMP.W   #ASSGN,D0
  384.     BEQ.S   .2
  385.     CMP.W   #39,D0
  386.     BEQ.S   .1
  387.     CMP.W   #31,D0
  388.     BEQ.S   .1
  389.     CMP.W   #11,D0
  390.     BEQ.S   .4
  391.     CMP.W   #32,D0
  392.     BMI.S   .XB
  393.     CMP.W   #36,D0
  394.     BMI.S   EATLEXP
  395. .XB:CMP.W   #41,D0
  396.     BEQ.S   EATLEXP
  397.     CMP.W   #42,D0
  398.     BEQ.S   .MET
  399.     CMP.W   #29,D0
  400.     BNE.S   .3          ; was ERROR0!!!
  401.     ADD.L   (A3),A3
  402.     BRA.S   EATLEXP
  403. .2: RTS
  404. .1: ADDQ.L  #4,A3
  405.     BRA.S   EATLEXP
  406. .4: BSET    #3,WARNINGS+3       ; a.complex=1 a statement
  407.     MOVE.W  LINENUM,ASSLINE
  408. .3: ADDQ.L  #8,A7
  409.     BRA.S   NOASSIGN
  410. .MET:   ADDQ.L  #4,A7
  411.     MOVE.L  (A7)+,A3
  412.     ADDQ.L  #2,A3
  413.     BRA DOEXP
  414.  
  415. DOMULTIPLE:
  416.     SUBQ.L  #2,A3
  417.     MOVE.L  A3,-(A7)
  418. .XL:CMP.W   #IDENT,(A3)+        ; SKIP VARS
  419.     BNE ERROR6
  420.     ADDQ.L  #4,A3
  421.     CMP.W   #COM,(A3)+
  422.     BEQ.S   .XL
  423.     CMP.W   #ASSGN,-2(A3)
  424.     BNE ERROR2
  425.     BSR EXP
  426.     MOVE.L  (A7)+,D0
  427.     MOVE.L  A3,-(A7)
  428.     MOVE.L  D0,A3
  429.     MOVEQ   #0,D0           ; REGISTER COUNT
  430. .L2:    CMP.W   #8,D0           ; NO MORE THAN 8 VARS
  431.     BEQ ERROR0
  432.     ADDQ.L  #2,A3           ; FILL VARS WITH D0..DX
  433.     MOVE.L  (A3)+,A0
  434.     LEA .1(PC),A1
  435.     MOVE.B  4(A0),D2
  436.     BEQ ERROR22
  437.     CMP.B   #LAB,D2
  438.     BEQ ERROR6
  439.     MOVE.W  (A1),D1
  440.     OR.W    D0,D1
  441.     MOVE.W  D1,(A4)+
  442.     JSR GVA0D7_9
  443.     ADDQ.L  #1,D0
  444.     CMP.W   #COM,(A3)+
  445.     BEQ .L2
  446.     MOVE.L  (A7)+,A3
  447.     BRA DOINSOUT
  448. .1: MOVE.L  D0,2(A5)
  449.  
  450.  
  451. DOLAB:
  452.     BTST    #3,CODEPREFS+3
  453.     BNE.S   .1
  454. .2: ;CMP.l   #$7000b,4(a3)
  455. ;    beq COMPLEXEXP
  456. ;    cmp.l   #$8000b,4(a3)
  457. ;    beq COMPLEXEXP
  458.     MOVE.W  4(A3),D0
  459.     CMP.W   #ASSGN,D0
  460.     BEQ DOBECOMES
  461.     CMP.W   #29,D0
  462.     BEQ DOBECOMES
  463.     CMP.W   #35,D0
  464.     BEQ DOBECOMESMETHOD
  465.     CMP.W   #41,D0
  466.     BEQ DOBECOMES
  467.     CMP.W   #COM,D0
  468.     BEQ DOMULTIPLE
  469.     CMP.W   #11,D0
  470.     BNE.S   .3
  471.     BSET    #3,WARNINGS+3       ; a=1 a statement
  472.     MOVE.W  LINENUM,ASSLINE
  473. .3: CMP.W   #19,D0
  474.     BNE DOEXP
  475.     SUBQ.L  #2,A3
  476.     BSR CHLAB
  477.     TST.W   (A3)+
  478.     TST.W   (A3)            ; INTR. FOLLOWS OR WHAT?
  479.     BEQ DOINSOUT
  480.     BSR DOINSREC
  481.     BRA DOINSOUT
  482. .1: CMP.W   #19,4(A3)
  483.     BNE ERROR32
  484.     BRA     .2
  485. ;*-*
  486. ;;COMPILE
  487.  
  488.  
  489. ;   NOTEZBIEN:  DEZE MOGEN NIET MEER REGISTERS VERSTOREN!
  490. ;; ADD LABEL
  491. ADDLABEL:             ; D0 LABEL (A4 IS ADR. LABEL)
  492.     MOVE.L  LABM+8(PC),A0       ; THRASHES A0/D0!
  493.     LSL.L   #2,D0
  494.     AND.L   #$3FFFF,D0
  495.     MOVE.L  A4,0(A0,D0.L)
  496.     RTS
  497. ;*-*
  498. ;; ADD BRANCH
  499. ADDBRANCH:            ; D0 LABEL (A4 IS ADR. NA OP.)
  500.     MOVE.L  A4,D1
  501.     SUBQ.L  #2,D1           ; +TRASH: D1/A0, -TRASH: D0 !
  502.  
  503.     TST.W   NEWOP
  504.     BEQ.S   .NL
  505.     BTST    #1,ICODEPREFS+3
  506.     BNE     .1
  507.     BTST    #2,CODEPREFS+3
  508.     BEQ.S   .NL
  509. .1:
  510.     TST.W   NEWOP020
  511.     BEQ     .LONG
  512.     CMP.W   #1,ECPU
  513.     BMI     .LONG
  514.     subq.l  #4,a4
  515.     move.w  NEWOP020,(a4)+
  516.     CLR.W   NEWOP020
  517.     CLR.W   NEWOP
  518.     BRA     ADDBRANCHPCREL32
  519. .LONG:
  520.     MOVE.L  #$30000,-2(A4)
  521.     ADDQ.L  #2,A4
  522.     MOVE.W  D7,-(A7)
  523.     MOVE.W  NEWOP,D7
  524.     BEQ.S   .NNO
  525.     MOVE.W  D7,-6(A4)
  526. .NNO:   MOVE.W  (A7)+,D7
  527. .NL:
  528.     GETM    A0
  529.     MOVE.L  BRANCHLIST,(A0)
  530.     MOVE.L  A0,BRANCHLIST
  531.     ADDQ.L  #4,A0
  532.     MOVE.L  D1,(A0)+
  533.     MOVE.W  D0,(A0)+
  534.     CLR.W   (A0)+
  535.     DONEM   A0
  536.     CLR.W   NEWOP
  537.     RTS
  538. ;*-*
  539. ;; ADD BRANCH RELOC
  540. ADDBRANCHRELOC:           ; D0 LABEL (A4 IS ADR. VOOR REL.LONG.)
  541.     MOVE.L  A4,D1           ; +TRASH: D1/A0, -TRASH: D0 !
  542.     MOVE.L  #$30000,(A4)+
  543.     GETM    A0
  544.     MOVE.L  BRANCHLIST(PC),(A0)
  545.     MOVE.L  A0,BRANCHLIST
  546.     ADDQ.L  #4,A0
  547.     MOVE.L  D1,(A0)+
  548.     MOVE.W  D0,(A0)+
  549.     CLR.W   (A0)+
  550.     DONEM   A0
  551.     RTS
  552. ;*-*
  553. ;; FORCE ABSOLUTE
  554. FORCEABSHERE:
  555.     MOVE.L  A4,D1           ; +TRASH: D1/A0, -TRASH: D0 !
  556.     MOVE.L  #$B0000,(A4)+
  557.     GETM    A0
  558.     MOVE.L  BRANCHLIST(PC),(A0)
  559.     MOVE.L  A0,BRANCHLIST
  560.     ADDQ.L  #4,A0
  561.     MOVE.L  D1,(A0)+
  562.     move.w  #1,(a0)+
  563.     MOVE.L  D0,(A0)+
  564.     DONEM   A0
  565.     RTS
  566. ;*-*
  567. ;; ADD BRANCH PCREL 32
  568. ADDBRANCHPCREL32:
  569.     MOVE.L  A4,D1
  570.     MOVE.L  #$90000,(A4)+
  571.     GETM    A0
  572.     MOVE.L  BRANCHLIST,(A0)
  573.     MOVE.L  A0,BRANCHLIST
  574.     ADDQ.L  #4,A0
  575.     MOVE.L  D1,(A0)+
  576.     MOVE.W  D0,(A0)+
  577.     CLR.W   (A0)+
  578.     DONEM   A0
  579.     RTS
  580. ;*-*
  581. ;; ADD BRANCH PCREL 16 EXTENDED
  582. ADDBRANCHPCREL16E:
  583.     MOVE.L  A4,D1
  584.     CLR.W   (A4)+
  585.     GETM    A0
  586.     MOVE.L  BRANCHLIST(PC),(A0)
  587.     MOVE.L  A0,BRANCHLIST
  588.     ADDQ.L  #4,A0
  589.     MOVE.L  D1,(A0)+
  590.     MOVE.W  D0,(A0)+
  591.     MOVE.W  #1,(A0)+
  592.     DONEM   A0
  593.     RTS
  594. ;*-*
  595. ;; ADD BRANCH PCREL 32 EXTENDED
  596. ADDBRANCHPCREL32E:
  597.     MOVE.L  A4,D1
  598.     MOVE.L  #$90000,(A4)+
  599.     GETM    A0
  600.     MOVE.L  BRANCHLIST(PC),(A0)
  601.     MOVE.L  A0,BRANCHLIST
  602.     ADDQ.L  #4,A0
  603.     MOVE.L  D1,(A0)+
  604.     MOVE.W  D0,(A0)+
  605.     MOVE.W  #1,(A0)+
  606.     DONEM   A0
  607.     RTS
  608. ;*-*
  609. ;; ADD LIB BRANCH
  610. PUTLIBBRANCH:
  611.     MOVE.L  A0,-(A7)
  612.     GETM    A0
  613.     MOVE.L  LIBPTRS(PC),(A0)+
  614.     MOVE.L  A0,LIBPTRS
  615.     MOVE.L  A4,(A0)+
  616.     MOVE.L  A6,(A0)+
  617.     BTST    #2,CODEPREFS+3
  618.     BNE     .LARGE
  619.     MOVE.W  #0,(A0)+
  620.     MOVE.W  #$6100,(A4)+
  621.     MOVE.W  #$0,(A4)+
  622.     BRA .EXIT
  623. .LARGE:
  624.     MOVE.W  #1,(A0)+
  625.     MOVE.W  #$4eb9,(a4)+
  626.     move.l  #$0,(a4)+
  627. .EXIT:
  628.     DONEM   A0
  629.     MOVE.L  (A7)+,A0
  630.     RTS
  631. ;*-*
  632. ;; NEW LABEL
  633. NEWLABEL:             ; => D0 LAB
  634.     MOVE.L  CURLABNAME(PC),D0
  635.     ADDQ.L  #1,CURLABNAME
  636.     BSR CHECKLABBUF
  637.     RTS
  638. ;*-*
  639.  
  640. ;; central important vars:
  641. ;------------------------
  642.  
  643. CURINTERIM: DC.L 0          ; [1] ADR. OF CURRENT INTERIM
  644. TOKENEND:   DC.L 0,0,0,10000,100*KB
  645. CURLIBASC:
  646. CURACODE:   DC.L 0,0        ; [3] ADR. OF CURRENT OBJPART
  647. ACODE:      DC.L 0          ;     ADR. OF OBJECTCODE
  648.         DC.L 0,MAXSTACK+1000,MINIMUM_ACODE
  649. HEAP:       DC.L 0          ; [5] ADR. OF CURRENT HEAPSPACE
  650.         DC.L 0,0,0,2000,10*KB
  651. LABM:       DC.L 0,0,0,0,5000,15*KB ; [6]
  652.  
  653.  
  654.  
  655. ECODE:      DC.L EXAMPLE        ; ADR. OF E-CODE
  656. CURECODE:   DC.L EXAMPLE        ; ADR. OF CURRENT ELINE
  657. ENDECODE:   DC.L EXAMPLEEND
  658. EBUF:       DC.L 0          ; <>0 --> DEALLOC
  659. EBUFSIZE:   DC.L 0
  660. GENERALSIZE:    DC.L 0
  661.  
  662. INITSTACK:  DC.L 0
  663. ESTACK:     DC.L ESTACKBUF      ; ADR. OF COMPILESTACK
  664. WORK:       DC.L WORKBUF        ; ADR. OF WORKBUFFER
  665. DIRNAMEX:   DC.L DIRNAME
  666. MODLEFT:    DC.L 0
  667.  
  668. LINENUM:    DC.W -1
  669. LINENUM2:   DC.W 0
  670. LINENUMZ:   DC.L 0
  671. ERROROBJ:   DC.L 0          ; IDENTNAME THAT CAUSED ERROR
  672. REALBRANCH: DC.L 0          ; OFFSET ADR
  673. STARTINTERIM:   DC.L 0
  674.  
  675. LOADEDVERSION:  DC.W 0
  676.  
  677. CHECKHEAP:  DC.W 10
  678. OPERSIZE:   DC.W 4          ; MUST BE KEPT AT 4 (FOR GLOBALS)
  679.  
  680. LIBINFO:    DC.L    0
  681.  
  682. ;----------------------------
  683. ;*-*
  684. ;; VARS/CODE
  685.  
  686. ; following code has HEAP in use!!!!!
  687.  
  688. DBLIST: DC.L    0       ; linked
  689. DBTAIL: DC.L    0
  690. DBBEG:  DC.L    0
  691. DBCUR:  DC.L    0       ; =end after one, ISDEBUG FLAG
  692. NEWOP:    DC.W    0     ; 0=NO32, X=NEWOP
  693. NEWOP020: DC.W  0       ; 0=NoBcc.L, X=NEWOP
  694. BRANCHLIST:   DC.L    0
  695. INITCODE:   BSR GLOBSTACK
  696. PROCRTS:    RTS
  697. GLOBSTACK:  DC.L    0   ; TOTAL GLOBAL
  698. XTRASTACK:  DC.L    0
  699. MINSTACK:   DC.L    0   ; ALL LOCAL ADDED
  700. CLEARXTRA:  ADD.L   #40,A7
  701. PROCEND:    DC.L    0
  702. PROCSTARTADR:   DC.L    0
  703. ;*-*
  704. ;; MACROS
  705. MAXINT=$7FF0
  706.  
  707. LDEF:   MACRO
  708.     TSTMOD
  709.     BEQ.S   *+12
  710.     CMP.W   #3,-2(A2)
  711.     BEQ ERROR48
  712.     ENDM
  713. ;*-*
  714.  
  715. ;; OPTCACHELINE
  716. OPTCACHELINE:               ; D0 LABEL (A4 IS ADR. LABEL)
  717.     cmp.w   #1,ECPU
  718.     bmi     .DO
  719.     btst    #1,ICODEPREFS+3
  720.     BEQ     .DO
  721.     move.l  d1,-(a7)
  722.     move.l  a4,d1
  723.     sub.l   ACODE,d1
  724.     and.l   #7,d1           ; boundaries!!
  725.     cmp.w   #2,d1
  726.     bne     .1
  727.     move.w  #$51fb,(a4)+
  728.     clr.l   (a4)+
  729.     bra     .DO1
  730. .1: cmp.w   #4,d1
  731.     bne     .2
  732.     move.l  #$51fa0000,(a4)+
  733.     bra     .DO1
  734. .2: cmp.w   #6,d1
  735.     bne     .DO1
  736.     move.w  #$51fc,(a4)+
  737. .DO1:
  738.     move.l  (a7)+,d1
  739. .DO:
  740.     RTS
  741. ;*-*
  742.  
  743. ;; "1"
  744. GETPARAMLABEL:            ; 1
  745.     CMP.W   #IDENT,(A3)+
  746.     BNE ERROR4
  747.     MOVE.L  (A3)+,A0
  748.     MOVE.W  10(A0),LABPRES+2
  749.     CMP.B   #LAB,4(A0)
  750.     BNE ERROR4
  751.     BTST    #4,5(A0)
  752.     BNE ERROR4
  753.     BRA JOBLOOP
  754. ;*-*
  755. ;; "2"
  756. JOBEXP:               ; 2
  757.     BSR EXP
  758.     BRA JOBLOOP
  759. ;*-*
  760. ;; "3"
  761. GETPARAMVAR:          ; 3
  762.     MOVE.W  (A3)+,D6
  763.     CMP.W   #IDENT,D6
  764.     BNE ERROR6
  765.     MOVE.L  (A3)+,A0
  766.     MOVE.L  A0,CURIDENTREC
  767.     MOVE.W  10(A0),VAROFFSET
  768.     MOVE.B  4(A0),D0
  769.     BEQ ERROR22
  770.     MOVE.W  D0,TYPELAB
  771.     CMP.B   #LAB,D0
  772.     BEQ ERROR6
  773.     BRA JOBLOOP
  774. ;*-*
  775. ;; "4"
  776. GETCOMMA:             ; 4
  777.     MOVE.W  (A3)+,D6
  778.     CMP.B   #COM,D6
  779.     BNE ERROR5
  780.     BRA JOBLOOP
  781. ;*-*
  782. ;; "5"
  783. SAVESTIDENT:          ; 5
  784.     MOVE.W  (A2)+,(A5)+
  785.     BRA JOBLOOP
  786. ;*-*
  787. ;; "6"
  788. FORWARDREFERENCE:         ; 6
  789.     BSR     NEWLABEL
  790.     MOVE.L  D0,(A5)+
  791.     MOVE.L  D0,LABPRES
  792.     BRA JOBLOOP
  793. ;*-*
  794. ;; "7"
  795. CHECKSTIDENT:         ; 7
  796.     MOVE.W  -(A5),D0
  797.     CMP.W   (A2)+,D0
  798.     BNE ERROR9
  799.     BRA JOBLOOP
  800. ;*-*
  801. ;; "8"
  802. MAKEBRANCH:           ; 8
  803.     MOVE.L  LABPRES,D0
  804.     CLR.W   NEWOP
  805.     BSR ADDBRANCH
  806.     BRA JOBLOOP
  807. ;*-*
  808. ;; "9"
  809. COPY2:                ; 9
  810.     MOVE.W  (A2)+,(A4)+
  811.     BRA JOBLOOP
  812. ;*-*
  813. ;; 10
  814. COPY4:                ; 10
  815.     MOVE.L  (A2)+,(A4)+
  816.     BRA JOBLOOP
  817. ;*-*
  818. ;; 11
  819. COPYN:                ; 11
  820.     MOVE.W  (A2)+,D0
  821. COPYNLOOP:
  822.     MOVE.W  (A2)+,(A4)+
  823.     DBRA    D0,COPYNLOOP
  824.     BRA JOBLOOP
  825.  
  826. ;*-*
  827. ;; 12
  828. COPY6:                ; 12
  829.     MOVE.L  (A2)+,(A4)+
  830.     MOVE.W  (A2)+,(A4)+
  831.     BRA JOBLOOP
  832. ;*-*
  833. ;; 13
  834. COPY8:                ; 13
  835.     MOVE.L  (A2)+,(A4)+
  836.     MOVE.L  (A2)+,(A4)+
  837.     BRA JOBLOOP
  838. ;*-*
  839. ;; 14
  840. COPY10:               ; 14
  841.     MOVE.L  (A2)+,(A4)+
  842.     MOVE.L  (A2)+,(A4)+
  843.     MOVE.W  (A2)+,(A4)+
  844.     BRA JOBLOOP
  845. ;*-*
  846. ;; 15
  847. REMEMBERLAB:          ; 15
  848.     MOVE.L  -(A5),D0
  849.     BSR ADDLABEL
  850.     BRA JOBLOOP
  851. ;*-*
  852. ;; 16               EXP/NIL
  853. EXPORNILL:            ; 16
  854.     TST.W   (A3)
  855.     BEQ.S   MAKEMOVEQ
  856.     CMP.W   #$400,(A3)
  857.     BEQ MAKED0
  858.     CMP.W   #IOFF+18,(A3)
  859.     BEQ.S   MAKEMOVEQ
  860.     BSR EXP
  861.     CMP.W   #COM,(A3)
  862.     BNE JOBLOOP
  863.     CLR.W   .C
  864. .XL:MOVE.W  .P(PC),(A4)+
  865.     ADDQ.L  #2,A3
  866.     BSR EXP
  867.     ADDQ.W  #1,.C
  868.     CMP.W   #COM,(A3)
  869.     BEQ.S   .XL
  870.     MOVE.W  .C(PC),D0
  871.     CMP.W   #MAXMULTRET,D0
  872.     BPL ERROR0
  873.     MOVE.W  .M(PC),D1
  874.     MOVE.W  D0,D2
  875.     MOVEQ   #9,D3
  876.     LSL.W   D3,D2
  877.     OR.W    D2,D1
  878.     MOVE.W  D1,(A4)+
  879. .L2:    SUBQ.W  #1,D0
  880.     MOVE.W  .R(PC),D1
  881.     MOVE.W  D0,D2
  882.     LSL.W   D3,D2
  883.     OR.W    D2,D1
  884.     MOVE.W  D1,(A4)+
  885.     TST.W   D0
  886.     BNE.S   .L2
  887.     BRA JOBLOOP
  888. .P: MOVE.L  D0,-(A7)
  889. .C: DC.W    0
  890. .M: MOVE.L  D0,D0
  891. .R: MOVE.L  (A7)+,D0
  892. MAKEMOVEQ:
  893.     MOVE.W  MOVEQ(PC),(A4)+
  894.     BRA JOBLOOP
  895. MAKED0:
  896.     ADDQ.L  #2,A3
  897.     BRA JOBLOOP
  898. ;*-*
  899. ;; 17               Procedure
  900. PROCFLAGON:           ; 17
  901. ;    BTST    #0,CODEPREFS
  902. ;    BEQ     .XXX
  903. ;    MOVE.L  #$4e880020,(a4)+
  904. ;.XXX:
  905.     CLR.L   FIXUPSTACKREGS
  906.     TST.W   PROCF
  907.     BNE ERROR9
  908.     BCLR    #3,ICODEPREFS+3
  909.     BSR.W   NEWLABEL
  910.     MOVE.L  D0,PROCEND
  911.     MOVE.L  A4,PROCSTARTADR
  912.     MOVEQ   #-1,D1
  913.     MOVE.W  D1,PROCF
  914.     MOVE.W  D1,DEFFLAG
  915.     CLR.W   HANDLEFLAG
  916.     MOVE.L  CURIDENTREC(PC),A0  ; NOW GET NR OF LOC VARS
  917.     MOVE.L  6(A0),A0
  918.     MOVE.L  A0,COMPILEPROC
  919.     CLR.L   PROCMASK        ; + REV
  920.     MOVE.W  4(A0),NRLOC
  921.     BTST    #0,2(A0)
  922.     BEQ.S   .1
  923.     MOVE.W  (A0),NRARG
  924.     BRA.S   .2
  925. .1: CLR.W   NRARG
  926. .2: CLR.L   XTRASTACK
  927. .3: BRA JOBLOOP
  928. ;*-*
  929. ;; 18               ENDPROC
  930. PROCFLAGOFF:          ; 18
  931.     TST.W   PROCF
  932.     BEQ ERROR9
  933.     MOVE.L  PROCEND(PC),D0
  934.     BSR ADDLABEL
  935.     MOVE.L  A4,D0
  936.     SUB.L   PROCSTARTADR(PC),D0
  937.     CMP.L   #32000,D0
  938.     BPL ERROR46
  939.     CLR.W   PROCF
  940.     MOVE.L  XTRASTACK(PC),D0
  941.     ADD.L   D0,MINSTACK
  942.  
  943.     TST.L   D0
  944.     BEQ.S   .2
  945.     MOVE.W  CLEARXTRA(PC),(A4)+
  946.     MOVE.L  D0,(A4)+
  947. .2:
  948.     TST.W   PROCMASKREV
  949.     BEQ.S   .1
  950.     RESTR   PROCMASKREV
  951. .1:
  952.     TST.W   HANDLEFLAG
  953.     BEQ.S   .1B
  954.     MOVE.L  .3(PC),(A4)+
  955. .1B:
  956.     BRA JOBLOOP
  957. .3: MOVEM.L (A7)+,D3-D7
  958. ;*-*
  959. ;; 19
  960. CHECK2LAB:            ; 19
  961.     BSR.S   CHLAB
  962.     BRA JOBLOOP
  963.  
  964. CHLAB:
  965.     MOVE.W  (A3)+,D6
  966.     CMP.W   #IDENT,D6
  967.     BNE ERROR4
  968.     MOVE.L  (A3)+,D0
  969.     MOVE.L  D0,CURIDENTREC
  970.     MOVE.L  D0,A0
  971.     CMP.B   #LAB,4(A0)
  972.     BNE ERROR4
  973.  
  974.     TST.W   EXPORTFLAG
  975.     BEQ.S   .1
  976.     BSET    #2,5(A0)        ; EXPORT
  977. .1:
  978.     MOVE.L  6(A0),A1        ; FOR MAIN
  979.     MOVE.L  (A0),A0
  980.     CMP.B   #'m',(A0)
  981.     BEQ.S   MAINFOUND
  982. MAINBACK:
  983.     CMP.L   #FOFF,D0
  984.     BMI.S   .1
  985.     MOVE.L  D0,A1
  986.     MOVEQ   #0,D0
  987.     MOVE.W  10(A1),D0
  988. .1: BSR ADDLABEL
  989.     RTS
  990.  
  991. MAINF:    DC.W    0
  992.  
  993. MAINFOUND:
  994.     CMP.B   #'a',1(A0)
  995.     BNE.S   MAINBACK
  996.     CMP.B   #'i',2(A0)
  997.     BNE.S   MAINBACK
  998.     CMP.B   #'n',3(A0)
  999.     BNE.S   MAINBACK
  1000.     CMP.B   #0,4(A0)
  1001.     BNE.S   MAINBACK
  1002.     TST.W   (A1)
  1003.     BNE ERROR23
  1004.     MOVEQ   #1,D0           ; MAINLABCODE
  1005.     TST.W   MAINF
  1006.     BNE ERROR14
  1007.     MOVE.W  D0,MAINF
  1008.     TSTMOD
  1009.     BEQ.S   MAINBACK
  1010.     BRA ERROR48
  1011. ;*-*
  1012. ;; 20
  1013. REMINDCURPOS:         ; 20
  1014.     BSR     NEWLABEL
  1015.     MOVE.L  D0,(A5)+
  1016.     BSR ADDLABEL
  1017.     BRA JOBLOOP
  1018. ;*-*
  1019. ;; 21               POPLAB
  1020. POPLAB:               ; 21
  1021.     MOVE.L  -(A5),LABPRES
  1022.     BRA JOBLOOP
  1023. ;*-*
  1024. ;; 22
  1025. INSERTVAROFF:         ; 22
  1026.     SUBQ.L  #2,A4
  1027.     MOVE.L  CURIDENTREC(PC),A0
  1028.     JSR GVA0D2_0
  1029.     BRA JOBLOOP
  1030. ;*-*
  1031. ;; 23               PUSHVAR
  1032. PUSHVAR:              ; 23
  1033.     MOVE.L  CURIDENTREC(PC),(A5)+
  1034.     BRA JOBLOOP
  1035. ;*-*
  1036. ;; 24               POPVAR
  1037. POPVAR:               ; 24
  1038.     MOVEA.L -(A5),A0
  1039.     MOVE.L  A0,CURIDENTREC
  1040.     MOVE.B  4(A0),TYPELAB
  1041.     MOVE.W  10(A0),VAROFFSET
  1042.     BRA JOBLOOP
  1043. ;*-*
  1044. ;; 25               PUSHLAB
  1045. PUSHLAB:              ; 25
  1046.     MOVE.L  LABPRES(PC),(A5)+
  1047.     BRA JOBLOOP
  1048. ;*-*
  1049. ;; 26               PUSHLAB 2
  1050. PUSHLAB2:             ; 26
  1051.     MOVE.L  LABPRES2(PC),(A5)+
  1052.     BRA JOBLOOP
  1053. ;*-*
  1054. ;; 27               POPLAB 2
  1055. POPLAB2:              ; 27
  1056.     MOVE.L  -(A5),LABPRES2
  1057.     BRA JOBLOOP
  1058. ;*-*
  1059. ;; 28               NEWLAB 2
  1060. NEWLAB2:              ; 28
  1061.     BSR NEWLABEL
  1062.     MOVE.L  D0,(A5)+
  1063.     MOVE.L  D0,LABPRES2
  1064.     BRA JOBLOOP
  1065. ;*-*
  1066. ;; 29               BRANCH
  1067. MAKEBRANCH2:          ; 29
  1068.     MOVE.L  LABPRES2(PC),D0
  1069.     CLR.W   NEWOP
  1070.     BSR ADDBRANCH
  1071.     BRA JOBLOOP
  1072. ;*-*
  1073. ;; 30
  1074. SETFLAG:              ; 30
  1075.     MOVE.W  #-1,FLAG
  1076.     BRA JOBLOOP
  1077. ;*-*
  1078. ;; 31
  1079. SKIPFLAG:             ; 31
  1080.     MOVE.W  (A2)+,D0
  1081.     TST.W   FLAG
  1082.     BNE.S   SKIPOUT
  1083. SKIPLOOP:
  1084.     TST.W   (A2)+           ; NOP
  1085.     DBRA    D0,SKIPLOOP
  1086. SKIPOUT:
  1087.     BRA JOBLOOP
  1088. ;*-*
  1089. ;; 32
  1090. CLEARFLAG:            ; 32
  1091.     MOVE.W  #0,FLAG
  1092.     BRA JOBLOOP         ; was: "OUT"
  1093. ;*-*
  1094. ;; 33               VARS
  1095. SKIPDEFLOCAL:         ; 33
  1096.     MOVEQ   #0,D6           ; D6=DEFARGS COUNT
  1097.     MOVE.W  (A2)+,D5        ; 1=PROC,2=LOCAL,3=DEF
  1098.  
  1099.     CLR.L   .DAAR
  1100.     CLR.L   .DAAR+4
  1101.     CLR.L   .DAAR+8
  1102.     CLR.L   .DAAR+12
  1103.  
  1104.  
  1105.     CLR.L   DBCUR
  1106.     BTST    #6,CODEPREFS+1
  1107.     BEQ.W   .NDB            ; NOW __DEBUG__ SPECIFIC
  1108.     CMP.W   #1,D5
  1109.     BNE.W   .NN
  1110.  
  1111.     GETM    A0
  1112.     MOVE.L  DBTAIL(PC),D0
  1113.     BNE.S   .LA
  1114.     MOVE.L  A0,DBLIST
  1115.     BRA.S   .LN
  1116. .LA:    MOVE.L  D0,A1
  1117.     MOVE.L  A0,(A1)
  1118. .LN:    MOVE.L  A0,DBTAIL
  1119.     MOVE.L  A0,D2
  1120.     CLR.L   (A0)+           ; NEXT
  1121.     MOVE.W  #4,(A0)+        ; COPY NAME FUN OR METHOD
  1122.     MOVE.L  COMPILEPROC(PC),A1
  1123.     MOVE.L  A1,D1
  1124.     CLR.W   (A0)+
  1125.     MOVE.L  A0,A6
  1126.     MOVE.L  10(A1),D0
  1127.     BEQ.S   .NM
  1128.     MOVE.L  D0,A1
  1129.     MOVE.L  OASCII(A1),A1
  1130. .COL:   MOVE.B  (A1)+,(A0)+
  1131.     BNE.S   .COL
  1132.     MOVE.B  #":",-1(A0)
  1133. .NM:    MOVE.L  D1,A1
  1134.     MOVE.L  14(A1),A1
  1135.     MOVE.L  (A1),A1
  1136. .CIL:   MOVE.B  (A1)+,(A0)+
  1137.     BNE.S   .CIL
  1138.     MOVE.L  A0,D0
  1139.     BTST    #0,D0
  1140.     BEQ.S   .NA
  1141.     CLR.B   (A0)+
  1142. .NA:    MOVE.L  A0,D0
  1143.     SUB.L   A6,D0
  1144.     MOVE.W  D0,-2(A6)
  1145.  
  1146.     MOVE.L  D1,A1           ; THIS BIT ADDS A "5" SELF EXTENSION
  1147.     MOVE.L  18(A1),D0
  1148.     BEQ.S   .NSELF
  1149.     MOVE.L  #$50004,(A0)+
  1150.     MOVE.W  LINENUM(PC),(A0)+
  1151.     MOVE.L  D0,A1
  1152.     MOVE.W  10(A1),(A0)+
  1153. .NSELF:
  1154.     CLR.W   (A0)+           ; TO BE ABLE TO DETECT A 5
  1155.     DONEM   A0
  1156.  
  1157. .NN:    GETM    A0          ; START REGULAR VAR DEBUG, 10 BYTES
  1158.     MOVE.L  A0,DBBEG
  1159.     CLR.L   (A0)+
  1160.     MOVE.W  D5,(A0)+
  1161.     MOVE.W  LINENUM(PC),(A0)+
  1162.     CLR.W   (A0)+
  1163.     MOVE.L  A0,DBCUR
  1164.  
  1165. .NDB:   TST.W   SCOPE
  1166.     BNE.S   .S
  1167.     CMP.W   #3,D5           ; must be DEF
  1168.     BNE ERROR35
  1169.     BRA.S   .XB
  1170. .S: CMP.W   #3,D5           ; musn't be DEF (LOCAL)
  1171.     BEQ ERROR35
  1172.     TST.W   PROCF
  1173.     BEQ ERROR35
  1174.     tst.w   DEFFLAG
  1175.     bne .XB
  1176.     cmp.w   #1,-2(a5)
  1177.     bne ERROR35
  1178. ;    TST.W   DEFFLAG
  1179. ;    BEQ ERROR35         ; NO LOCAL DEFS AFTER 1ST STAT.
  1180. .XB:MOVEQ   #0,D0           ; D0=XTRA ARRAY STACKSPACE
  1181.     CMP.W   #18,(A3)
  1182.     BEQ .BRCL
  1183. .XL:CMP.W   #IDENT,(A3)+
  1184.     BNE ERROR6
  1185.     MOVE.L  (A3)+,A0        ; A0=VAR
  1186.     MOVE.W  (A3),D2
  1187.     CMP.W   #11,D2          ; =
  1188.     BEQ .15
  1189.     TST.L   D6
  1190.     BNE ERROR30         ; WE WANT DEFARGS TILL THE END
  1191. .DAB:   CMP.W   #19,D2          ; :
  1192.     BEQ .2
  1193.     CMP.W   #29,D2          ; []
  1194.     BNE.S   .1
  1195.     ADDQ.L  #6,A3           ; ALSO SKIP ]OFFSET
  1196.     LDEF
  1197.     CMP.W   #VALUE,(A3)+
  1198.     BNE ERROR30
  1199.     MOVE.L  (A3)+,D2        ; D2=SIZE
  1200.     CMP.W   #30,(A3)+
  1201.     BNE ERROR34
  1202.     CMP.W   #19,(A3)+
  1203.     BNE ERROR0
  1204.     MOVE.W  (A3)+,D1
  1205.     CMP.W   #IOFF+60,D1
  1206.     BNE.S   .NAR
  1207.     BSR .SETREG
  1208.     MOVE.W  (A3)+,D1
  1209. .NAR:   CMP.W   #IOFF+41,D1
  1210.     BEQ .3
  1211.     CMP.W   #IOFF+42,D1
  1212.     BEQ .4
  1213.     CMP.W   #IOFF+47,D1
  1214.     BEQ .LIST
  1215.     CMP.W   #IOFF+20,D1
  1216.     BEQ .3_1
  1217.     CMP.W   #IOFF+21,D1
  1218.     BEQ .3_1
  1219.     CMP.W   #IOFF+22,D1
  1220.     BEQ .3_1
  1221.     CMP.W   #31,D1
  1222.     BEQ .3_1
  1223.     BRA .SK2
  1224.     BRA ERROR33
  1225. .1:
  1226.     MOVE.L  DBCUR(PC),D2        ; ADD DEBUG ADDRESSING MODE
  1227.     BEQ.S   .NDBA
  1228.     MOVE.L  D2,A6
  1229.     MOVE.W  10(A0),D2
  1230.     BTST    #3,5(A0)
  1231.     BEQ.S   .NREG
  1232.     ADD.W   #30000,D2
  1233. .NREG:  MOVE.W  D2,(A6)+
  1234.     MOVE.L  A6,DBCUR
  1235. .NDBA:
  1236.     CMP.W   #COM,(A3)+
  1237.     BEQ .XL
  1238.     CMP.W   #18,-(A3)
  1239.     BEQ     .BRCL
  1240.  
  1241. .E:
  1242.     MOVE.L  DBCUR(PC),D0        ; FINISH DEBUG INFOS
  1243.     BEQ.S   .NDBF
  1244.     MOVE.L  DBBEG(PC),A0
  1245.     MOVE.L  A0,D1
  1246.     ADD.L   #10,D1
  1247.     MOVE.L  D0,A1
  1248.     SUB.L   D1,D0
  1249.     BNE.S   .NZ
  1250.     DONEM   A0
  1251.     BRA.S   .NDBF
  1252. .NZ:    LSR.W   #1,D0
  1253.     MOVE.W  D0,8(A0)
  1254.     DONEH   A1
  1255.     MOVE.L  DBTAIL(PC),D0
  1256.     BNE.S   .LA2
  1257.     MOVE.L  A0,DBLIST
  1258.     BRA.S   .LN2
  1259. .LA2:   MOVE.L  D0,A1
  1260.     MOVE.L  A0,(A1)
  1261. .LN2:   MOVE.L  A0,DBTAIL
  1262. .NDBF:
  1263.     BRA JOBLOOP
  1264.  
  1265. .BRCL:  TST.L   D0          ; NO ARRAYS AS PROC ARGS
  1266.     BNE ERROR0
  1267.     tst.l   FIXUPSTACKREGS
  1268.     BEq .E
  1269.     move.w  .FIXATE,(A4)+
  1270.     BRA    .E
  1271. .FIXATE:
  1272.     subq.l   #4,a7
  1273. .DA:    ADDQ.L  #1,D6           ; HANDLE DEFARGS
  1274.     ADDQ.L  #2,A3
  1275.     CMP.W   #8,(A3)
  1276.     BNE.S   .DA1
  1277.     ADDQ.L  #2,A3
  1278. .DA1:   CMP.W   #1,(A3)+
  1279.     BNE .DA2
  1280.     ADDQ.L  #4,A3           ; SKIP VALUE
  1281.     MOVE.W  (A3),D2
  1282.     BRA .DAB
  1283. .DA2:
  1284.     tst.l   FIXUPSTACKREGS
  1285.     bne     .DA2_2
  1286.     move.l  .DAC2(PC),(A4)+
  1287. .DA2_2:
  1288.     subq.l  #2,a3
  1289.     MOVE.B  (A3),D2
  1290.     AND.B   #$FE,D2
  1291.     CMP.B   #4,D2
  1292.     BNE     ERROR30
  1293.     cmp.b   #5,(a3)+
  1294.     seq     d2
  1295.     and.l   #8,d2
  1296.     or.b    (a3)+,d2
  1297.     cmp.w   #12,d2
  1298.     bpl ERROR0
  1299.     move.l  a0,-(a7)
  1300.     lea .DAAR(PC,D2),A0
  1301.     tst.b   (a0)
  1302.     bne ERROR50
  1303.     st  (a0)
  1304.     move.l  (a7)+,a0
  1305.     move.w  .DAC(PC),(A4)
  1306.     or.w    d2,(A4)+
  1307.     addq.l  #1,FIXUPSTACKREGS
  1308.     move.w  (a3),d2
  1309.     BRA .DAB
  1310. .DAC:
  1311.     MOVE.L  D0,-(A7)
  1312. .DAC2:
  1313.     MOVEM.L D2-D7/A2-A6,-(A7)
  1314. .DAAR:
  1315.     DC.L    0,0,0,0
  1316.  
  1317.  
  1318. .15:    CMP.W   #1,D5
  1319.     BEQ .DA
  1320.     ADDQ.L  #2,A3
  1321.     LDEF
  1322.  
  1323.     
  1324.     MOVEM.L D0/D5/A0,-(A7)
  1325.     MOVE.L  A4,A0
  1326.     BSR TINYEXP         ; no EXP allowed!!!
  1327.     BTST    #3,ICODEPREFS+3
  1328.     BNE.S   .15a
  1329.     BSET    #3,ICODEPREFS+3
  1330.     BRA.S   .15b
  1331. .15a:
  1332.     cmp.l   .LASTVAL,D0
  1333.     bne     .15b
  1334.     move.l  a0,a4
  1335. .15b:
  1336.     move.l  d0,.LASTVAL
  1337.     MOVEM.L (A7)+,D0/D5/A0      ; NOTE:    DEF a=x   -->problems
  1338.  
  1339.     
  1340.     MOVEQ   #0,D2
  1341.     CMP.L   #$0013003C+IOFF,(A3)
  1342.     BNE.S   .NRLA
  1343.     ADDQ.L  #4,A3
  1344.     BSR .SETREG
  1345.     MOVEQ   #1,D2
  1346. .NRLA:
  1347.     MOVE.W  .16(PC),(A4)+
  1348.     JSR GVA0D4_9
  1349.     MOVE.B  4(A0),D4
  1350.     BEQ ERROR22
  1351.     TST D2
  1352.     BNE.S   .RDONE
  1353.     CMP.W   #19,(A3)
  1354.     BNE .1
  1355.     MOVEQ   #-1,D2          ; TEST: D2 WAS INTERIM
  1356.  
  1357. .2: ADDQ.L  #2,A3
  1358. .AGAIN:
  1359.     CMP.W   #IOFF+44,(A3)+
  1360.     BEQ.S   .PTR
  1361.     CMP.W   #IOFF+20,-2(A3)     ; a:LONG
  1362.     BEQ .1
  1363.     CMP.W   #IOFF+82,-2(A3)     ; a:FLOAT
  1364.     BNE .AG_00
  1365.     BSET    #5,5(A0)
  1366.     BRA ERROR87
  1367. .AG_00:
  1368.     CMP.W   #IOFF+61,-2(A3)     ; a:REAL
  1369.     BNE .REG
  1370.     BSET    #4,5(A0)
  1371.     BRA .1
  1372. .REG:   CMP.W   #IOFF+60,-2(A3)     ; a:REG
  1373.     BNE .OBJ
  1374.  
  1375.     BSR .SETREG
  1376.  
  1377. .RDONE: CMP.W   #COM,(A3)
  1378.     BEQ .1
  1379.     TST.W   (A3)
  1380.     BEQ .1
  1381.     BRA.S   .AGAIN
  1382. .PTR:
  1383.     CMP.W   #IOFF+39,(A3)+
  1384.     BNE ERROR33
  1385.     CMP.W   #IOFF+44,(A3)
  1386.     BEQ .MULTIPTR
  1387. .PTR_BACK:
  1388.     BSR.S   .SETT
  1389.     BRA .1
  1390.  
  1391. .MULTIPTR:
  1392.     MOVE.B  #0,16(A0)           ; references
  1393. .MULTI_00:
  1394.     CMP.W   #IOFF+44,(A3)
  1395.     BNE .PTR_BACK
  1396.     ADDQ.L  #2,A3
  1397.     CMP.W   #IOFF+39,(A3)+
  1398.     BNE ERROR33
  1399.     ADDQ.B  #1,16(A0)
  1400.     BRA .MULTI_00
  1401.  
  1402. .OBJ:   CMP.L   #-1,D2          ; NO INIT OBJ'S
  1403.     BEQ ERROR0
  1404.     CMP.W   #31,-2(A3)
  1405.     BNE ERROR33
  1406.     LDEF
  1407.     MOVE.L  (A3)+,A6
  1408.     MOVE.W  OSIZE(A6),D2
  1409.     EXT.L   D2
  1410.     MOVE.L  D2,D7
  1411.     MOVE.L  A6,(A0)         ; TYPE=OBJECT
  1412.     BSR.W   .5
  1413.     BRA .1
  1414.  
  1415. .SETT:  MOVE.W  (A3)+,D1
  1416.     CMP.W   #31,D1
  1417.     BEQ.S   .W3
  1418.     CMP.W   #IOFF+20,D1     ; "OF LONG"
  1419.     BNE.S   .W1
  1420.     LSL.L   #2,D2
  1421.     MOVE.W  #4,2(A0)
  1422.     BRA.S   .SK
  1423. .W1:    CMP.W   #IOFF+21,D1     ; "OF INT"
  1424.     BNE.S   .W2
  1425.     LSL.L   #1,D2
  1426.     MOVE.W  #2,2(A0)
  1427.     BRA.S   .SK
  1428. .W2:    CMP.W   #IOFF+22,D1     ; "OF CHAR"
  1429.     BNE ERROR33
  1430. .SK:    RTS
  1431. .W3:    MOVE.L  A4,-(A7)        ; "OF <object>"
  1432.     MOVE.L  (A3)+,A4
  1433.     MOVE.L  A4,(A0)
  1434.     MULU    OSIZE(A4),D2
  1435.     MOVE.L  (A7)+,A4
  1436.     BRA.S   .SK
  1437.  
  1438. .3_1:
  1439.     subq.l  #2,a3
  1440.     move.l  d2,d7
  1441.     bsr.s   .SETT
  1442.     bra .SK2
  1443.  
  1444. .3: MOVE.L  D2,D7
  1445.     CMP.W   #IOFF+45,(A3)       ; "OF"
  1446.     BNE.S   .SK2
  1447.     ADDQ.L  #2,A3
  1448.     CMP.W   #IOFF+44,(A3)
  1449.     BEQ     .ARR_00
  1450.     BSR.S   .SETT
  1451. .SK2:   CMP.L   #MAXINT,D2
  1452.     BPL ERROR31
  1453.     BSR     .5          ; a[100]:ARRAY OF <TYPE>
  1454.     BRA .1
  1455. .ARR_00:
  1456.     MOVE.B  #0,16(A0)
  1457.     LSL.L   #2,D2
  1458. .ARR_01:
  1459.     CMP.W   #IOFF+44,(A3)
  1460.     BNE     .ARR_02
  1461.     ADDQ.L  #2,A3
  1462.     CMP.W   #IOFF+39,(A3)+
  1463.     BNE ERROR33
  1464.     ADDQ.B  #1,16(A0)
  1465.     BRA .ARR_01
  1466. .ARR_02:
  1467.     MOVE.L  D2,-(A7)
  1468.     BSR     .SETT
  1469.     MOVE.L  (A7)+,D2
  1470. .ARR_03:
  1471.     CMP.L   #MAXINT,D2
  1472.     BPL ERROR31
  1473.     BSR.S   .5          ; a[100]:ARRAY OF <TYPE>
  1474.     BRA .1
  1475.  
  1476. .4: MOVE.L  D2,D7
  1477.     ADDQ.L  #1,D2
  1478.     CMP.L   #MAXINT,D2
  1479.     BPL ERROR31
  1480.     BSR.S   .5          ; a[100]:STRING
  1481.     MOVE.W  .11(PC),(A4)+
  1482.     SWAP    D7
  1483.     MOVE.W  .10(PC),(A4)+
  1484.     MOVE.L  D7,(A4)+
  1485.     MOVE.W  .LC(PC),(A4)+
  1486.     CMP.W   #3,D5
  1487.     BEQ.S   .14
  1488.     ADDQ.L  #8,XTRASTACK
  1489.     BRA .1
  1490. .14:    ADDQ.L  #8,GLOBSTACK
  1491.     BRA .1
  1492.  
  1493. .LIST:  MOVE.W  #4,2(A0)        ; SET TO "PTR TO LONG"
  1494.     MOVE.L  D2,D7
  1495.     LSL.L   #2,D2
  1496.     CMP.L   #MAXINT,D2
  1497.     BPL ERROR31
  1498.     BSR.S   .5          ; a[25]:LIST
  1499.     MOVE.W  .11(PC),(A4)+
  1500.     SWAP    D7
  1501.     MOVE.W  .10(PC),(A4)+
  1502.     MOVE.L  D7,(A4)+
  1503.     MOVE.W  .LC(PC),(A4)+
  1504.     CMP.W   #3,D5
  1505.     BEQ.S   .L1
  1506.     ADDQ.L  #8,XTRASTACK
  1507.     BRA .1
  1508. .L1:    ADDQ.L  #8,GLOBSTACK
  1509.     BRA .1
  1510.  
  1511. .5: CMP.L   #1,D2           ; INIT ARRAY
  1512.     BMI ERROR31
  1513.     MOVE.W  .6(PC),(A4)+
  1514.     BTST    #0,D2
  1515.     BEQ.S   .7
  1516.     ADDQ.L  #1,D2
  1517. .7: BTST    #1,D2
  1518.     BEQ.S   .7B
  1519.     ADDQ.L  #2,D2
  1520. .7B:    MOVE.L  D2,D3
  1521.     NEG.L   D3
  1522.     MOVE.W  D3,(A4)+
  1523.     ADD.L   D2,D0
  1524.     CMP.W   #3,D5
  1525.     BEQ.S   .12
  1526.     MOVE.L  XTRASTACK(PC),D3    ; LOC
  1527.     BSR .C
  1528.     MOVE.L  D3,XTRASTACK
  1529.     BRA.S   .13
  1530. .12:    MOVE.L  GLOBSTACK(PC),D3    ; GLOB
  1531.     BSR .C
  1532.     MOVE.L  D3,GLOBSTACK
  1533. .13:    MOVE.W  .8(PC),(A4)+
  1534.  
  1535.     MOVE.B  4(A0),D4
  1536.     BEQ ERROR22
  1537. ;   CMP.B   #GLOBV,D4       ;
  1538. ;   BNE.S   .20         ; SET REG
  1539. ;   BCLR    #1,-2(A4)       ;
  1540. ;.20:   MOVE.W  10(A0),(A4)+
  1541. ;   CMP.B   #GLOBV,D4
  1542. ;   BEQ .9
  1543. ;   BSET    #1,-4(A4)
  1544.     JMP GVA0D4_9
  1545.  
  1546. .6: LEA 4(A7),A7
  1547. .8: MOVE.L  A7,2(A5)
  1548. .10:    MOVE.L  #1,-(A7)
  1549. .LC:    CLR.L   -(A7)
  1550. .11:    CLR.W   (A7)
  1551. .16:    MOVE.L  D0,2(A5)
  1552. .C: ADD.L   D2,D3
  1553.     MOVE.L  D3,D2
  1554.     RTS
  1555.  
  1556. .SETREG:BTST    #3,5(A0)
  1557.     BEQ ERROR50
  1558.     CMP.W   #2,D5
  1559.     BNE ERROR33         ; regvars only local
  1560.     RTS
  1561. .LASTVAL:
  1562.     DC.L    0
  1563. FIXUPSTACKREGS:
  1564.     DC.L    0
  1565.  
  1566. ;*-*
  1567. ;; 34
  1568. GETNRLOC:             ; 34 NRLOC IN -2(A4)
  1569.     MOVE.W  NRLOC(PC),-2(A4)
  1570.     BRA JOBLOOP
  1571. ;*-*
  1572. ;; 35
  1573. INSERTVAROFFDEST:         ; 35
  1574.     SUBQ.L  #2,A4
  1575.     MOVE.L  CURIDENTREC(PC),A0
  1576.     JSR GVA0D2_9
  1577.     BRA JOBLOOP
  1578. ;*-*
  1579. ;; 36
  1580. GETBRACKLEFT:         ; 36
  1581.     MOVE.W  (A3)+,D6
  1582.     CMP.W   #17,D6
  1583.     BNE ERROR23
  1584.     BRA JOBLOOP
  1585. ;*-*
  1586. ;; 37
  1587. GETBRACKRIGHT:            ; 37
  1588.     MOVE.W  (A3)+,D6
  1589.     CMP.W   #18,D6
  1590.     BNE ERROR23
  1591.     BRA JOBLOOP
  1592. ;*-*
  1593. ;; 38
  1594. DOINCBIN:             ; 38
  1595.     LEA CURACODE(PC),A0
  1596.     MOVE.L  8(A0),D3
  1597.     ADD.L   12(A0),D3
  1598.     SUB.L   A4,D3
  1599.     SUBQ.L  #8,D3           ; MAXREADSIZE
  1600.     CMP.L   #3000,D3
  1601.     BMI ERROR37
  1602.  
  1603.     CMP.W   #STR,(A3)+      ; D0-D6/ A3/A6
  1604.     BNE ERROR0
  1605.     ADDQ.L  #2,A3
  1606.     MOVE.W  (A3)+,D6        ; D6=WORDLENSTR
  1607.     MOVE.L  DOSBASE(PC),A6
  1608.     MOVE.L  A3,D1
  1609.     MOVE.L  #1005,D2
  1610.     JSR -30(A6)
  1611.     TST.L   D0
  1612.     BEQ ERROR28
  1613.     MOVE.L  D0,D5           ; D5=HANDLE
  1614.  
  1615.     MOVE.L  D5,D1
  1616.     MOVE.L  A4,D2
  1617.     JSR -42(A6)         ; READ
  1618.     MOVE.L  D0,D4           ; D4=READLEN
  1619.     MOVE.L  D5,D1
  1620.     JSR -36(A6)         ; CLOSE
  1621.     CMP.L   #2,D4
  1622.     BMI ERROR28
  1623.     SUB.L   D4,D3
  1624.     CMP.L   #3000,D3
  1625.     BMI ERROR37
  1626.     ADD.L   D4,A4
  1627.     BTST    #0,D4
  1628.     BEQ.S   .1
  1629.     MOVE.B  #0,(A4)+
  1630. .1:
  1631.     LSL.W   #1,D6
  1632.     EXT.L   D6
  1633.     ADD.L   D6,A3
  1634.     BRA JOBLOOP
  1635. ;*-*
  1636. ;; 39               LONG
  1637. DOLONG:               ; 39
  1638. .2: CMP.W   #IDENT,-2(A3)
  1639.     BEQ     .4
  1640. .3: bsr     ASM_GRABVALUE
  1641.     tst.l   d0
  1642.     bmi     ERROR30
  1643.     move.l  d1,(a4)+
  1644.     CMP.W   #COM,(A3)
  1645.     BNE.S   .1
  1646.     ADDQ.L  #2,A3
  1647.     BRA.S   .2
  1648. .1: BRA JOBLOOP
  1649. .4: MOVem.L D0-D7/A0-A2/A5/A6,-(a7)
  1650.     MOVE.L  (A3)+,a0
  1651.     cmp.b   #LAB,4(a0)
  1652.     bne ERROR4
  1653.     move.w  10(a0),d0
  1654.     bsr ADDBRANCHRELOC
  1655.     movem.l (a7)+,d0-a2/a5/a6
  1656.     cmp.w   #COM,(A3)
  1657.     BNE .1
  1658.     ADDQ.L  #2,a3
  1659.     bra .2
  1660. ;*-*
  1661. ;; 40               INT
  1662. DOINT:                ; 40
  1663. .2:
  1664.     bsr     ASM_GRABVALUE
  1665.     tst.l   d0
  1666.     bmi     ERROR30
  1667.     move.w  d1,(a4)+
  1668.     CMP.W   #COM,(A3)
  1669.     BNE.S   .1
  1670.     ADDQ.L  #2,A3
  1671.     BRA.S   .2
  1672. .1: BRA JOBLOOP
  1673. ;*-*
  1674. ;; 41               CHAR
  1675. DOCHAR:               ; 41
  1676. .2: bsr     ASM_GRABVALUE
  1677.     tst.l   d0
  1678.     bmi     .3
  1679.     move.b  d1,(a4)+
  1680. .5: CMP.W   #COM,(A3)
  1681.     BNE.S   .1
  1682.     ADDQ.L  #2,A3
  1683.     BRA.S   .2
  1684. .1: MOVE.L  A4,D0
  1685.     BTST    #0,D0
  1686.     BEQ.S   .6
  1687.     MOVE.B  #0,(A4)+
  1688. .6: BRA JOBLOOP
  1689. .3: CMP.W   #STR,(A3)+
  1690.     BNE ERROR30
  1691.     MOVE.W  (A3)+,D1        ; =REAL LEN
  1692.     MOVE.W  (A3)+,D0        ; =WORD LEN
  1693.     SUBQ.L  #1,D1
  1694. .4: MOVE.B  (A3)+,(A4)+
  1695.     DBRA    D1,.4
  1696.     ADDQ.L  #1,A3
  1697.     MOVE.L  A3,D0
  1698.     BTST    #0,D0
  1699.     BEQ.S   .5
  1700.     ADDQ.L  #1,A3
  1701.     BRA.S   .5
  1702. ;*-*
  1703. ;; 42
  1704. JOBINS:               ; 42
  1705.     MOVE.L  A5,-(A7)
  1706.     BSR.S   DOINSREC
  1707.     CMPA.L  (A7)+,A5
  1708.     BNE ERROR9
  1709.     BRA JOBLOOP
  1710.  
  1711. DOINSREC:
  1712.     MOVE.W  (A3)+,D7
  1713.     BEQ ERROR0
  1714.     CMP.W   #-1,D7
  1715.     BEQ ERROR0
  1716.     MOVE.L  A2,-(A7)
  1717.     BSR DOINS
  1718.     MOVE.L  (A7)+,A2
  1719.     RTS
  1720. ;*-*
  1721. ;; 43
  1722. EXPECT:               ; 43 IF FOLLOWING CODE IS PRESENT, CONTINUE
  1723.     MOVE.W  (A3),D0         ;    WITH JOB, ELSE STOP.
  1724.     CMP.W   (A2)+,D0
  1725.     BEQ.S   .1          ;    CONTINUE, EAT 1
  1726. .2: TST.W   (A2)+
  1727.     BNE.S   .2          ;    STOP, EAT ALL
  1728.     SUBQ.L  #2,A2
  1729.     BRA JOBLOOP
  1730. .1: ADDQ.L  #2,A3
  1731.     BRA JOBLOOP
  1732. ;*-*
  1733. ;; 44
  1734. SERROR:
  1735.     BRA ERROR0          ; 44
  1736. ;*-*
  1737. ;; 45
  1738. EXPECT2:              ; 45 IF FOLLOWING CODE IS PRESENT, CONTINUE
  1739.     MOVE.W  (A3),D0         ;    WITH JOB, ELSE FIND PAST ZERO.
  1740.     CMP.W   (A2)+,D0
  1741.     BEQ.S   .1          ;    CONTINUE, EAT 1
  1742. .2: TST.W   (A2)+
  1743.     BNE.S   .2          ;    STOP, EAT ALL TO NEXT ZERO
  1744.     BRA JOBLOOP
  1745. .1: ADDQ.L  #2,A3
  1746.     BRA JOBLOOP
  1747. ;*-*
  1748. ;; 46
  1749. JOBSKIP:              ; 46
  1750.     ADDQ.L  #2,A2
  1751.     BRA JOBLOOP
  1752. ;*-*
  1753. ;; 47
  1754. EXPECTASSIGN:         ; 47
  1755.     CMP.W   #ASSGN,(A3)+
  1756.     BNE ERROR2
  1757.     BRA JOBLOOP
  1758. ;*-*
  1759. ;; 48
  1760. EXPECTTO:             ; 48 CHOMEUR
  1761.     BRA JOBLOOP
  1762. ;*-*
  1763. ;; 49               FOR - middle part
  1764. DOMIDFOR:                 ; 49
  1765.     CMP.W   #IOFF+39,(A3)+      ; MUST BE "TO"
  1766.     BNE ERROR0                  ;
  1767.  
  1768.     bsr     EXP
  1769.  
  1770.     move.w  .P1(pc),(a4)+
  1771.     bsr     NEWLABEL
  1772.     move.l  d0,.ST
  1773.     bsr     ADDLABEL
  1774.     clr.l   (a4)+
  1775.     bsr     NEWLABEL
  1776.     move.l  d0,.SS
  1777.     bsr     ADDLABEL
  1778.     move.l  #1,(a4)+
  1779.  
  1780. .P1:bra.b   .cont
  1781. .ST:dc.l    0  ; to -
  1782. .SS:dc.l    0  ; step
  1783.  
  1784. .cont:
  1785.     move.w  .P2(pc),(a4)+
  1786.     move.l  .ST,d0
  1787.     bsr     ADDBRANCHRELOC    ; store destination
  1788.  
  1789.  
  1790.     cmp.w   #IOFF+40,(a3)
  1791.     bne     .cont2
  1792.     addq.l  #2,a3
  1793.     bsr     EXP
  1794.     move.w  .P2(PC),(a4)+
  1795.     move.l  .SS,d0            ; calculate step
  1796.     bsr     ADDBRANCHRELOC
  1797. .cont2:
  1798.  
  1799.     move.w  .MO(pc),(a4)+     ; get current value
  1800.     move.l  CURIDENTREC,a1
  1801.     jsr     GVA1D2_0          ; get var;
  1802.  
  1803.     bsr     NEWLABEL
  1804.     move.l  d0,.LB            ; entry point.
  1805.     bsr     ADDLABEL          ; here the code begins
  1806.  
  1807.     move.w  .TS(PC),(a4)+
  1808.     move.l  .SS(PC),D0        ; check step sign
  1809.     bsr     ADDBRANCHRELOC    ;
  1810.  
  1811.     move.l  .CD(PC),(A4)+
  1812.     move.w  .CD+4(PC),(A4)+
  1813.     move.l  .ST(pc),d0        ; compare actual against final
  1814.     bsr     ADDBRANCH         ; cmp [1]
  1815.     move.l  .CD+6(pc),(a4)+
  1816.  
  1817.     bsr     NEWLABEL
  1818.     move.l  d0,.FINE          ;
  1819.     bsr     ADDBRANCH
  1820.  
  1821.     move.l  .CD+10(pc),(a4)+  ;
  1822.     move.w  .CD+14(pc),(a4)+  ;
  1823.     move.l  .ST(pc),d0        ; as above...
  1824.     bsr     ADDBRANCH         ;
  1825.     move.l  .neg+4(pc),(a4)+
  1826.     move.l  .FINE,d0
  1827.     bsr     ADDBRANCH
  1828.  
  1829.     move.l  .FINE,(a5)+          ; label to be set after the loop code
  1830.     move.l  .LB,(a5)+            ; label to jump to perform next step
  1831.     move.l  .SS(PC),(a5)+            ; step position
  1832.     move.l  CURIDENTREC,(a5)+    ; current ident.
  1833.     bra     JOBLOOP
  1834.  
  1835. .P2:dc.w    $23c0,0,0      ; move.l d0,$xxx
  1836. .LB:dc.l    0
  1837. .FINE:dc.l  0
  1838. .TS:dc.w    $4ab9,0,0      ; tst.l $xxx
  1839. .CD:bmi.b   .neg           ; 2
  1840.     cmp.l   .CD(pc),d0      ; 2+[2]
  1841.     bgt     .CD            ; 4
  1842.     bra.B   .pos           ; 2
  1843. .neg:
  1844.     cmp.l   .CD(pc),d0      ; 2+[2]
  1845.     bmi     .CD            ; 4
  1846. .pos:
  1847. .MO:move.l  12(a5),d0
  1848.  
  1849.  
  1850. ;*-*
  1851. ;; 50               Initialization
  1852. ENDGLOBVAR:           ; 50
  1853.     TST.W   SCOPE
  1854.     BNE JOBLOOP
  1855.     MOVE.W  #-1,SCOPE
  1856.     TSTMOD
  1857.     BNE JOBLOOP
  1858.     BTST    #5,CODEPREFS
  1859.     BNE JOBLOOP
  1860.     MOVE.L  INITCODE(PC),(A4)+  ; DELEGATES
  1861.     MOVEQ   #6,D0
  1862.     MOVE.W  .1(PC),NEWOP
  1863.     BSR ADDBRANCH
  1864.     BTST    #0,CODEPREFS
  1865.     BNE     .SETUP_POWERPC      ; PPC!!!
  1866.     MOVE.L  INITCODE(PC),(A4)+  ; MAIN
  1867.     MOVEQ   #1,D0
  1868.     MOVE.W  .1(PC),NEWOP
  1869.     BSR ADDBRANCH
  1870. .BACK:
  1871.     MOVE.L  LIBINFO(PC),D0
  1872.     BNE.S   .5
  1873.     MOVE.L  GLOBSTACK(PC),D0
  1874.     BEQ.S   .3
  1875.     MOVE.W  CLEARXTRA(PC),(A4)+
  1876.     MOVE.L  D0,(A4)+
  1877. .3: MOVE.L  .4(PC),(A4)+
  1878. .8: MOVE.W  PROCRTS(PC),(A4)+
  1879.     BRA JOBLOOP
  1880. .4: MOVE.L  D0,-28(A4)
  1881. .1: JSR .1
  1882. .6: MOVE.L  -4(A4),A7
  1883. .7: MOVEQ   #-1,D0          ; SUCCES
  1884. .5: MOVE.L  .6(PC),(A4)+
  1885.     MOVE.W  .7(PC),(A4)+
  1886.     BRA.S   .8
  1887. .SETUP_POWERPC:
  1888.     MOVE.l  #$4e53ff70,(a4)+
  1889.     MOVE.l  #$244f24bc,(A4)+
  1890.     MOVEQ   #1,D0
  1891.     BSR ADDBRANCHRELOC
  1892.     MOVE.L  #8,D0
  1893.     LEA     .PPCCODE(PC),A0
  1894. .COPY:
  1895.     MOVE.L  (A0)+,(A4)+
  1896.     DBRA    D0,.COPY
  1897.     BRA     .BACK
  1898.  
  1899. .PPCCODE:
  1900.     CLR.L   4(A2)           ;4
  1901.     CLR.L   8(A2)           ;4
  1902.     MOVE.L  A7,12(A2)       ;4
  1903.     MOVE.L  A7,D2           ;2
  1904.     SUB.L   -64(A4),D2      ;4
  1905.     MOVE.L  D2,16(A2)       ;4
  1906.     MOVE.L  -132(A4),A6     ;4
  1907.     JSR     -30(A6)         ;4
  1908.     MOVE.L  20(A2),D0       ;4
  1909.     UNLK    A3              ;2
  1910.  
  1911. ;*-*
  1912. ;; 51
  1913. ELSEMAKELAB:          ; 51
  1914.     BSR.W   NEWLABEL
  1915.     MOVE.L  D0,(A5)+
  1916.     BRA JOBLOOP
  1917. ;*-*
  1918. ;; 52
  1919. ELSEUSELAB:           ; 52
  1920.     MOVE.L  -(A5),D0
  1921.     MOVE.L  D0,D4
  1922.     CLR.W   NEWOP
  1923.     BSR ADDBRANCH
  1924.     MOVE.L  D4,(A5)+
  1925.     BRA JOBLOOP
  1926. ;*-*
  1927. ;; 53
  1928. ELSEDEFLAB:           ; 53
  1929.     MOVE.L  -(A5),D0
  1930.     BSR ADDLABEL
  1931.     BRA JOBLOOP
  1932. ;*-*
  1933. ;; 54
  1934. ELSEWAISTELAB:            ; 54
  1935.     SUBQ.L  #4,A5
  1936.     BRA JOBLOOP
  1937. ;*-*
  1938. ;; Object blablabla
  1939. INHERITOBJECT:            ; A1=OBJECTHEAD, A2=MEMBERTAIL
  1940.     MOVEM.L D0-D2/A0/A4-A6,-(A7)    ; A3=SUPERCLASS INTERIM
  1941.     CMP.W   #31,(A3)+
  1942.     BNE ERROR39
  1943.     MOVE.L  (A3)+,A0        ; A0=SUPER
  1944.     MOVE.L  A0,OSUPER(A1)
  1945.     CMPA.L  A0,A1
  1946.     BEQ ERROR50
  1947.     MOVE.W  ODESTR(A0),ODESTR(A1)
  1948. .NID:   TST.W   OID(A0)
  1949.     BEQ ERROR39
  1950.     MOVE.W  OSIZE(A0),D1        ; SET D1=OFFSET
  1951.     EXT.L   D1
  1952.     LEA OMEMB+4(A0),A0      ; A0=SUPERMEMBERLIST
  1953. .XL:MOVE.L  -(A0),A0
  1954.     MOVE.L  A0,D0
  1955.     BEQ.S   DONE1
  1956.     GETM    A4
  1957.     CLR.L   (A4)+
  1958.     MOVE.L  (A0)+,(A4)+
  1959.     MOVE.W  (A0)+,(A4)+
  1960.     MOVE.W  OBJCOUNT(PC),(A4)+
  1961.     ADDQ.L  #2,A0
  1962.     MOVE.L  (A0)+,(A4)+
  1963.     MOVE.L  (A0)+,(A4)+
  1964.     LEA -16(A0),A0
  1965.     LEA -16(A4),A5
  1966.     MOVE.L  A5,(A2)
  1967.     LEA ONEXT(A5),A2
  1968.     CLR.L   (A2)
  1969.     DONEM   A4
  1970.     BRA.S   .XL
  1971. DONE1:  MOVE.L  D1,SUPERSIZE        ; STACK NEW OSIZE FROM SUPER
  1972.     MOVE.L  OSUPER(A1),A0
  1973.     LEA OMETHOD(A0),A0      ; A0=SUPER.METHODS
  1974.     MOVE.L  OMETHOD(A1),D1      ; D1=HEAD OWN.METHODS
  1975.     CLR.L   OMETHOD(A1)     ; REMAKE FROM SCRATCH
  1976. .L2:    MOVE.L  (A0),D0         ; M_NEXT
  1977.     BEQ .DONE2
  1978.     MOVE.L  D0,A0
  1979.     MOVE.L  M_NAME(A0),D0       ; D0=NAME
  1980.     TST.L   D1
  1981.     BEQ.S   .INH
  1982.     MOVE.L  D1,A4           ; A4=SEARCH IN OWN METHODS
  1983.     MOVEQ   #0,D1
  1984. .L3:    MOVE.L  D0,A5
  1985.     MOVE.L  M_NAME(A4),A6
  1986. .L4:    CMPM.B  (A5)+,(A6)+     ; STRCMP
  1987.     BNE.S   .C
  1988.     TST.B   -1(A6)
  1989.     BNE.S   .L4
  1990.     MOVE.L  (A4),A5         ; LINK IN OVERRIDING METHOD
  1991.     MOVE.L  OMETHOD(A1),(A4)
  1992.     MOVE.L  A4,OMETHOD(A1)
  1993.     MOVE.W  M_OFF(A0),M_OFF(A4) ; SAME OFFSET
  1994.     MOVE.L  M_PROC(A0),A6
  1995.     MOVE.W  (A6),D2
  1996.     MOVE.L  M_PROC(A4),A6
  1997.     CMP.W   (A6),D2
  1998.     BEQ.S   .ASAME
  1999.     BSET    #1,M_FLAGS(A4)
  2000. .ASAME: MOVE.L  A5,D2
  2001.     BEQ.S   .L2
  2002.     MOVE.L  A5,A6           ; IF THERE'S PART OF OWNMETHODS
  2003. .L5:    TST.L   (A5)            ; LEFT, RELINK IT.
  2004.     BEQ.S   .DD
  2005.     MOVE.L  (A5),A5
  2006.     BRA.S   .L5
  2007. .DD:    MOVE.L  D1,(A5)
  2008.     MOVE.L  A6,D1
  2009.     BRA.S   .L2
  2010. .C: MOVE.L  (A4),-(A7)      ; PICK NEXT OWN METHOD
  2011.     MOVE.L  D1,(A4)         ; RELINK D1
  2012.     MOVE.L  A4,D1
  2013.     MOVE.L  (A7),A4
  2014.     TST.L   (A7)+
  2015.     BNE.S   .L3
  2016. .INH:   GETM    A4
  2017.     MOVE.L  OMETHOD(A1),(A4)
  2018.     MOVE.L  A4,OMETHOD(A1)
  2019.     ADDQ.L  #4,A4
  2020.     MOVE.L  M_PROC(A0),(A4)+
  2021.     MOVE.W  M_TYPE(A0),(A4)+
  2022.     BSET    #0,-1(A4)       ; INHERITED
  2023.     MOVE.W  M_OFF(A0),(A4)+
  2024.     MOVE.L  M_NAME(A0),(A4)+
  2025.     DONEM   A4
  2026.     BRA .L2
  2027. .DONE2: MOVE.L  OSUPER(A1),A0       ; ADD NEW METHODS (D1)
  2028.     MOVE.W  ODEL(A0),D0     ; D0 = DELEGATESIZE
  2029.     MOVE.W  ODELOFF(A0),ODELOFF(A1)
  2030.     BSR.S   NEWMETHODS
  2031.     MOVEM.L (A7)+,D0-D2/A0/A4-A6
  2032.     MOVE.L  SUPERSIZE,D1
  2033.     RTS
  2034.  
  2035. NOINHERIT:
  2036.     MOVEM.L D0-D2/A0/A4/A6,-(A7)
  2037.     CLR.W   ODEL(A1)
  2038.     MOVE.L  OMETHOD(A1),D1
  2039.     BEQ.S   .1
  2040.     CLR.L   OMETHOD(A1)
  2041.     MOVEQ   #4,D0
  2042.     BSR NEWMETHODS
  2043. .1: MOVEM.L (A7)+,D0-D2/A0/A4/A6
  2044.     RTS
  2045.  
  2046. NEWMETHODS:
  2047.     TST.L   D1
  2048.     BEQ.S   .DONE3
  2049.  
  2050.     TST.W   D0
  2051.     BNE.S   .SAFE
  2052.     MOVEQ   #4,D0           ; INHERITANCE FROM METHOD-LESS OBJECT
  2053. .SAFE:
  2054.     MOVE.L  D1,A4
  2055. .L6:    MOVE.L  (A4),D2         ; NEW METHODS WITH OTHER M_OFF
  2056.     MOVE.L  OMETHOD(A1),(A4)
  2057.     MOVE.L  A4,OMETHOD(A1)
  2058.     MOVE.W  D0,M_OFF(A4)
  2059.  
  2060.     MOVE.L  M_NAME(A4),A6
  2061.     CMP.B   #'e',(A6)+
  2062.     BNE.S   .NEND
  2063.     CMP.B   #'n',(A6)+
  2064.     BNE.S   .NEND
  2065.     CMP.B   #'d',(A6)+
  2066.     BNE.S   .NEND
  2067.     TST.B   (A6)
  2068.     BNE.S   .NEND
  2069.     MOVE.L  M_PROC(A4),A0
  2070.     TST.W   (A0)            ; .end() NO ARGS
  2071.     BNE ERROR59
  2072.     BSET    #2,M_FLAGS(A4)
  2073.     MOVE.W  D0,ODESTR(A1)
  2074. .NEND:
  2075.     ADDQ.W  #4,D0
  2076.     MOVE.L  D2,A4
  2077.     TST.L   D2
  2078.     BNE.S   .L6
  2079. .DONE3: MOVE.W  D0,ODEL(A1)
  2080.     RTS
  2081.  
  2082. CREATEDELEGATEMEM:        ; A1=OBJECTHEAD, A2=MEMBERTAIL
  2083.     MOVEM.L A4-A5,-(A7)
  2084.     GETM    A4
  2085.     CLR.L   (A4)+           ; .NEXT
  2086.     MOVE.W  D1,(A4)+        ; .OFFSET
  2087.     MOVE.W  D1,ODELOFF(A1)
  2088.     ADDQ.W  #4,D1           ; SET D1=OFFSET
  2089.     MOVE.W  #$0100,(A4)+        ; .FLAGS
  2090.     MOVE.W  #4,(A4)+        ; .SIZE
  2091.     MOVE.W  OBJCOUNT(PC),(A4)+  ; .ID
  2092.     CLR.L   (A4)+           ; .ASCII (PRIVATE)
  2093.     LEA -12(A4),A5
  2094.     MOVE.L  A5,(A2)
  2095.     LEA ONEXT(A5),A2
  2096.     CLR.L   (A2)
  2097.     DONEM   A4
  2098.     MOVEM.L (A7)+,A4-A5
  2099.     RTS
  2100.  
  2101. SUPERSIZE:    DC.L    0
  2102. OBJCOUNT:     DC.W    0
  2103. OBJPRIV:      DC.W    0   ; 0=PUB / 1=PRIV
  2104.  
  2105. CHECKPR:
  2106.     MOVE.W  (A3),D0
  2107.     CMP.W   #IOFF+64,D0
  2108.     BNE.S   .y
  2109.     CLR.W   OBJPRIV
  2110.     ADDQ.L  #2,A3
  2111.     BRA.S   .x
  2112. .y: CMP.W   #IOFF+65,D0
  2113.     BNE.S   .x
  2114.     MOVE.W  #1,OBJPRIV
  2115.     ADDQ.L  #2,A3
  2116. .x:
  2117.     RTS
  2118.  
  2119.  
  2120. FINDDOUBLEMEMBER:         ; A0=MEMBER, A1=OBJH, USE D0, SAVE ALL
  2121.     MOVEM.L A3-A5,-(A7)
  2122.     LEA OMEMB+4(A1),A3
  2123. .XL:MOVE.L  ONEXT(A3),A3
  2124.     MOVE.L  A3,D0
  2125.     BEQ.S   .X
  2126.     CMP.L   A3,A0
  2127.     BEQ.S   .XL
  2128.     MOVE.L  OASCII(A0),A4
  2129.     MOVE.L  OASCII(A3),A5       ; ASCII
  2130.     MOVE.L  A5,D0
  2131.     BEQ.S   .XL
  2132. .L2:    CMPM.B  (A5)+,(A4)+
  2133.     BNE.S   .XL
  2134.     TST.B   -1(A5)
  2135.     BNE.S   .L2
  2136.     BRA ERROR43
  2137. .X: MOVEM.L (A7)+,A3-A5
  2138.     RTS
  2139.  
  2140. ;*-*
  2141. ;; 55
  2142. DOOBJECT:             ; 55
  2143.     MOVE.L  A2,-(A7)
  2144.     CLR.W   OBJPRIV
  2145.     ADDQ.W  #1,OBJCOUNT
  2146.     MOVEQ   #0,D1           ; D1=OFFSET !
  2147.     CMP.W   #31,(A3)+       ; objheader
  2148.     BNE ERROR39
  2149.     MOVE.L  (A3)+,A1        ; A1=OBJECT HEAD
  2150.     TST.W   OID(A1)
  2151.     BNE ERROR43             ; DOUBLE DECL OBJ
  2152.     MOVE.W  OBJCOUNT(PC),OID(A1)
  2153.     LEA OMEMB(A1),A2        ; A2=TAIL MEMLIST
  2154.     CLR.B   OFLAGS(A1)
  2155.     TST.W   EXPORTFLAG
  2156.     BEQ.S   .NE
  2157.     BSET    #0,OFLAGS(A1)       ; EXPORT OBJECT
  2158. .NE:
  2159.     TST.W   (A3)
  2160.     BEQ.S   .NOINH
  2161.     BSR CHECKPR
  2162. .z1:
  2163.     TST.W   (A3)
  2164.     BEQ.S   .NOINH
  2165.     CMP.W   #IOFF+45,(A3)+  ; OF <SUPERCLASS>
  2166.     BNE ERROR39
  2167.     BSR INHERITOBJECT       ; WANTS A1,A2, SAVES ALL
  2168.     BSR CHECKPR
  2169. .z2:
  2170.     BRA.S   .NOI
  2171. .NOINH: BSR NOINHERIT
  2172. .NOI:   TST.W   ODEL(A1)
  2173.     BEQ.S   .NVIRT
  2174.     CMP.W   #-1,ODELOFF(A1)
  2175.     BNE.S   .NVIRT
  2176.     BSR CREATEDELEGATEMEM   ; WANTS A1,A2, SAVES ALL
  2177. .NVIRT: TST.W   (A3)+
  2178.     BNE ERROR39
  2179. .XL:CMPI.W  #21,(A3)+
  2180.     BNE ERROR39
  2181.     MOVE.W  (A3)+,LINENUM   ; ERline
  2182.     CMP.W   #IOFF+49,(A3)   ; ENDOBJECT
  2183.     BEQ .X
  2184.     BSR CHECKPR
  2185. .z3:
  2186.     TST.W   (A3)
  2187.     BNE.S   .L2
  2188.     ADDQ.L  #2,A3
  2189.     BRA.S   .XL
  2190.  
  2191. .L2:
  2192.     CMP.W   #IOFF+75,(A3)
  2193.     BNE     .CONTINUE
  2194.     ADDQ.L  #2,A3
  2195.     CMP.W   #29,(A3)+
  2196.     BNE     ERROR0
  2197.     ADDQ.L  #4,A3
  2198.     MOVE.L  D1,.LAST_SIZE
  2199.     MOVE.L  D1,.TOTAL_SIZE
  2200. .UNION_LOOP:
  2201.     MOVE.L  .LAST_SIZE,D1
  2202.     BSR     OBJECT_UNION
  2203.     CMP.L   .TOTAL_SIZE,D1
  2204.     BLT     .UN_SKIP
  2205.     MOVE.L  D1,.TOTAL_SIZE
  2206. .UN_SKIP:
  2207.     CMP.W   #COM,(A3)+
  2208.     BEQ     .UNION_LOOP
  2209.     MOVE.L  .TOTAL_SIZE,D1
  2210.     CMp.W   #30,-2(A3)
  2211.     BNE     ERROR34
  2212.     BRA     .1
  2213. .LAST_SIZE:
  2214.     DC.L    0
  2215. .TOTAL_SIZE
  2216.     DC.L    0
  2217.  
  2218.  
  2219.  
  2220. .CONTINUE:
  2221.     CMP.W   #39,(A3)+       ; ONE OR MORE DEFS
  2222.     BNE ERROR31
  2223.     MOVE.L  (A3)+,A0        ; A0=IDENTPTR MEMBER
  2224.     BSR FINDDOUBLEMEMBER
  2225.     TST.W   OBJPRIV
  2226.     BEQ.S   .PUB
  2227.     BSET    #0,OFLAGS(A0)   ; MEMBER IS PRIVATE
  2228. .PUB:   MOVE.L  A0,(A2)
  2229.     LEA ONEXT(A0),A2
  2230.     CLR.L   (A2)
  2231.     TST.W   OID(A0)
  2232.     BNE ERROR43             ; DOUBLE DECL OBJ
  2233.     MOVE.W  D1,(A0)
  2234.     MOVE.W  #4,4(A0)
  2235.     MOVEQ   #4,D2           ; D2=ADDSIZE
  2236.     MOVE.W  (A3),D0
  2237.     CMP.W   #19,D0          ; :<TYPE>
  2238.     BNE .ARRAY
  2239.     ADDQ.L  #2,A3
  2240.     MOVE.W  (A3)+,D0
  2241.     CMP.W   #IOFF+20,D0
  2242.     BEQ.S   .O
  2243.     CMP.W   #IOFF+21,D0
  2244.     BNE.S   .2
  2245.     MOVEQ   #2,D2           ; INT
  2246.     BRA.S   .O
  2247. .2: CMP.W   #IOFF+22,D0
  2248.     BNE.S   .SOBJ
  2249.     MOVEQ   #1,D2           ; CHAR
  2250. .O: MOVE.L  D2,D3
  2251. .O2:    MOVE.W  OBJCOUNT(PC),6(A0)
  2252.     MOVE.W  D3,4(A0)
  2253.     ADD.L   D2,D1
  2254.     BTST    #0,1(A0)        ; CHECK ON WORD BOUNDARIES
  2255.     BEQ.S   .1
  2256.     BTST    #0,D2
  2257.     BNE.S   .1
  2258.     ADDQ.W  #1,(A0)
  2259.     ADDQ.L  #1,D1
  2260. .1: MOVE.W  (A3)+,D0
  2261.     BEQ .XL
  2262.     CMP.W   #COM,D0
  2263.     BEQ .L2
  2264.     BRA ERROR39
  2265. .X: ADDQ.L  #2,A3
  2266.     MOVE.W  D1,OSIZE(A1)
  2267.     TST.W   D1
  2268.     BEQ ERROR39         ; EMPTY OBJECT
  2269.     MOVE.L  (A7)+,A2
  2270.     BRA JOBLOOP         ; ONLY EXIT!
  2271. .SOBJ:  CMP.W   #IOFF+44,D0
  2272.     BEQ.S   .PTR
  2273.     CMP.W   #31,D0
  2274.     BNE ERROR33
  2275.     MOVE.L  (A3)+,A6
  2276.     MOVE.L  A6,OPTRTYPE(A0)
  2277.     BSET    #1,OFLAGS(A0)
  2278.     TST.W   OID(A6)
  2279.     BEQ ERROR42
  2280.     CMP.L   A1,A6
  2281.     BEQ ERROR39         ; RECURSIVE DEFINITION
  2282.     MOVE.W  4(A6),D2
  2283.     EXT.L   D2
  2284.     MOVEQ   #0,D3
  2285.     BRA.S   .O2
  2286. .PTR:   CMP.W   #IOFF+39,(A3)+
  2287.     BNE ERROR33
  2288.     BSR .GETT
  2289.     MOVEQ   #4,D2
  2290.     MOVEQ   #4,D3
  2291.     BRA.W   .O2
  2292. .ARRAY: CMP.W   #29,D0          ; []:ARRAY
  2293.     BNE.W   .O
  2294.     ADDQ.L  #6,A3           ; ALSO SKIP ]OFFSET
  2295.     CMP.W   #VALUE,(A3)+
  2296.     BNE ERROR30
  2297.     MOVE.L  (A3)+,D2
  2298.     CMP.W   #30,(A3)+
  2299.     BNE ERROR34
  2300.     CMP.W   #19,(A3)+
  2301.     BNE ERROR0
  2302.     CMP.W   #IOFF+41,(A3)
  2303.     BNE     .zz1
  2304. ;    BNE ERROR0
  2305.     ADDQ.L  #2,A3
  2306.     CMP.W   #IOFF+45,(A3)       ; OF?
  2307.     BNE.S   .A2
  2308.     ADDQ.L  #2,A3
  2309. .zz1:
  2310.     BSR .GETT
  2311.     MOVE.L  D0,D3
  2312.     AND.L   #$FFFFFFF0,D3
  2313.     BEQ.S   .A3
  2314.     MOVE.L  D0,A6
  2315.     MOVE.W  OSIZE(A6),D0
  2316. .A3:    MULU    D0,D2
  2317.     BRA.S   .A2A
  2318. .A2:    MOVE.L  #1,OPTRTYPE(A0)
  2319.     BSET    #1,OFLAGS(A0)
  2320. .A2A:   BTST    #0,D2
  2321.     BEQ .A1
  2322.     ADDQ.L  #1,D2
  2323. .A1:    CMP.L   #MAXOBJSIZE,D2
  2324.     BPL ERROR31
  2325.     CMP.L   #1,D2
  2326.     BMI ERROR31
  2327.     MOVEQ   #0,D3
  2328.     BRA .O2
  2329. .GETT:  MOVE.W  (A3)+,D0        ; TRASHES ONLY D0 (TYPE)
  2330.     CMP.W   #31,D0              ; PTR/ARRAY OF/TO <OBJECT>
  2331.     BNE.S   .GT1
  2332.     MOVE.L  (A3)+,D0
  2333.     BRA.S   .GTE
  2334. .GT1:   CMP.W   #IOFF+20,D0     ; LONG
  2335.     BNE.S   .GT2
  2336.     MOVEQ   #4,D0
  2337.     BRA.S   .GTE
  2338. .GT2:   CMP.W   #IOFF+21,D0     ; INT
  2339.     BNE.S   .GT3
  2340.     MOVEQ   #2,D0
  2341.     BRA.S   .GTE
  2342. .GT3:   CMP.W   #IOFF+22,D0     ; CHAR
  2343.     BNE.S   .MUT
  2344.     MOVEQ   #1,D0
  2345. .GTE:   MOVE.L  D0,OPTRTYPE(A0)
  2346.     BSET    #1,OFLAGS(A0)
  2347.     RTS
  2348. .MUT:   CMP.W   #45,D0          ; MUTUALLY RECURSIVE PTR TO <OBJ>
  2349.     BNE ERROR33
  2350.     MOVE.L  D1,-(A7)
  2351.     MOVE.L  (A3)+,D1
  2352.     BSR FINDOBJ
  2353.     TST.L   D0
  2354.     BEQ ERROR42
  2355.     MOVE.L  (A7)+,D1
  2356.     BRA.S   .GTE
  2357.  
  2358. ;; UNION
  2359.  
  2360. OBJECT_UNION:
  2361.     CMP.W   #29,(A3)
  2362.     BNE     ERROR0
  2363.     ADDQ.L  #6,A3
  2364. .CONTINUE
  2365.     CMP.W   #39,(A3)+       ; ONE OR MORE DEFS
  2366.     BNE ERROR33             ; Not a member
  2367.     MOVE.L  (A3)+,A0        ; A0=IDENTPTR MEMBER
  2368.     BSR FINDDOUBLEMEMBER    ; check if already defined
  2369.     TST.W   OBJPRIV         ; check if private
  2370.     BEQ.S   .PUB            ;
  2371.     BSET    #0,OFLAGS(A0)   ; MEMBER IS PRIVATE
  2372. .PUB:
  2373.     MOVE.L  A0,(A2)         ; Link a member (ok)
  2374.     LEA ONEXT(A0),A2        ; A0 = member (from 0)
  2375.     CLR.L   (A2)            ; A2 = member link pos
  2376.     TST.W   OID(A0)         ; Check if defined already
  2377.     BNE ERROR43             ; DOUBLE DECL OBJ
  2378.     MOVE.W  D1,(A0)         ; D1 = object offset;
  2379.     MOVE.W  #4,4(A0)        ; standard size = LONG
  2380.     MOVEQ   #4,D2           ; D2=ADDSIZE
  2381.     MOVE.W  (A3),D0         ; check if there's somethig after member
  2382.     CMP.W   #19,D0          ; :<TYPE>
  2383.     BNE .ARRAY              ;
  2384.     ADDQ.L  #2,A3           ;
  2385.     MOVE.W  (A3)+,D0        ;
  2386.     CMP.W   #IOFF+20,D0     ; LONG
  2387.     BEQ.S   .O              ;
  2388.     CMP.W   #IOFF+21,D0     ; INT
  2389.     BNE.S   .2
  2390.     MOVEQ   #2,D2           ;
  2391.     BRA.S   .O
  2392. .2: CMP.W   #IOFF+22,D0     ; CHAR
  2393.     BNE     .SOBJ
  2394.     MOVEQ   #1,D2
  2395. .O: MOVE.L  D2,D3
  2396. .O2:MOVE.W  OBJCOUNT(PC),6(A0)
  2397.     MOVE.W  D3,4(A0)        ; SIZEOF member
  2398.     ADD.L   D2,D1           ;
  2399.     BTST    #0,1(A0)        ; CHECK ON WORD BOUNDARIES
  2400.     BEQ.S   .1              ;
  2401.     BTST    #0,D2           ;
  2402.     BNE.S   .1              ;
  2403.     ADDQ.W  #1,(A0)         ;
  2404.     ADDQ.L  #1,D1           ;
  2405. .1: MOVE.W  (A3)+,D0        ;
  2406. ;    BEQ .XL                ; anything else?
  2407.     CMP.W   #COM,D0
  2408.     BEQ .CONTINUE
  2409.     CMP.W   #30,D0          ; "]" - end of part 1
  2410.     BNE ERROR39
  2411.  
  2412. ;    GETM A0                 ; fill an with empty field
  2413. ;    MOVE.L  A0,(A2)
  2414. ;    LEA ONEXT(A0),A2
  2415. ;    MOVE.W  OBJCOUNT(PC),6(A0)
  2416. ;    MOVE.W  #0,4(A0)        ;
  2417. ;    MOVE.W  D1,(A0)         ;
  2418. ;    BSET    #0,2(A0)        ; private
  2419. ;    BSET    #1,2(A0)        ; typed?
  2420. ;    MOVE.L  #0,8(A0)        ; noname
  2421. ;    MOVE.L  #1,12(A0)       ;
  2422. ;    MOVE.L  #0,16(A0)       ;
  2423. ;    DONEM A0
  2424.  
  2425.     RTS
  2426.  
  2427. .X: ADDQ.L  #2,A3           ; skip sth
  2428.     MOVE.W  D1,OSIZE(A1)    ;
  2429.     TST.W   D1              ;
  2430.     BEQ ERROR39             ; EMPTY OBJECT
  2431.     MOVE.L  (A7)+,A2        ;
  2432.     BRA JOBLOOP             ; ONLY EXIT!
  2433.  
  2434. .SOBJ:
  2435.     CMP.W   #IOFF+44,D0     ; PTR
  2436.     BEQ.S   .PTR            ;
  2437.     CMP.W   #31,D0          ; :object
  2438.     BNE ERROR33             ;
  2439.     MOVE.L  (A3)+,A6        ;
  2440.     MOVE.L  A6,OPTRTYPE(A0) ;
  2441.     BSET    #1,OFLAGS(A0)   ;
  2442.     TST.W   OID(A6)         ;
  2443.     BEQ ERROR42             ;
  2444.     CMP.L   A1,A6           ;
  2445.     BEQ ERROR39             ; RECURSIVE DEFINITION
  2446.     MOVE.W  4(A6),D2        ;
  2447.     EXT.L   D2              ;
  2448.     MOVEQ   #0,D3           ;
  2449.     BRA     .O2             ;
  2450. .PTR:                       ;
  2451.     CMP.W   #IOFF+39,(A3)+  ; "PTR TO"
  2452.     BNE ERROR33             ;
  2453.     BSR .GETT               ;
  2454.     MOVEQ   #4,D2           ;
  2455.     MOVEQ   #4,D3           ;
  2456.     BRA.W   .O2             ;
  2457. .ARRAY:
  2458.     CMP.W   #29,D0          ; []:ARRAY
  2459.     BNE.W   .O              ;
  2460.     ADDQ.L  #6,A3           ; ALSO SKIP ]OFFSET
  2461.     CMP.W   #VALUE,(A3)+    ;
  2462.     BNE ERROR30             ;
  2463.     MOVE.L  (A3)+,D2        ;
  2464.     CMP.W   #30,(A3)+       ;
  2465.     BNE ERROR34             ;
  2466.     CMP.W   #19,(A3)+       ;
  2467.     BNE ERROR0              ;
  2468.     CMP.W   #IOFF+41,(A3)+  ;
  2469.     BNE ERROR0              ;
  2470.     CMP.W   #IOFF+45,(A3)   ; OF?
  2471.     BNE.S   .A2             ;
  2472.     ADDQ.L  #2,A3           ;
  2473.     BSR .GETT               ;
  2474.     MOVE.L  D0,D3           ;
  2475.     AND.L   #$FFFFFFF0,D3   ;
  2476.     BEQ.S   .A3             ;
  2477.     MOVE.L  D0,A6           ;
  2478.     MOVE.W  OSIZE(A6),D0    ;
  2479. .A3:
  2480.     MULU    D0,D2           ;
  2481.     BRA.S   .A2A            ;
  2482. .A2:
  2483.     MOVE.L  #1,OPTRTYPE(A0) ;
  2484.     BSET    #1,OFLAGS(A0)
  2485. .A2A:
  2486.     BTST    #0,D2           ;
  2487.     BEQ .A1                 ;
  2488.     ADDQ.L  #1,D2           ;
  2489. .A1:
  2490.     MOVE.W  D2,OSIZEOF(A6)  ;
  2491.     CMP.L   #MAXOBJSIZE,D2  ;
  2492.     BPL ERROR31             ;
  2493.     CMP.L   #1,D2           ;
  2494.     BMI ERROR31             ;
  2495.     MOVEQ   #0,D3           ;
  2496.     BRA .O2                 ;
  2497. .GETT:  MOVE.W  (A3)+,D0        ; TRASHES ONLY D0 (TYPE)
  2498.     CMP.W   #31,D0              ; PTR/ARRAY OF/TO <OBJECT>
  2499.     BNE.S   .GT1
  2500.     MOVE.L  (A3)+,D0
  2501.     BRA.S   .GTE
  2502. .GT1:   CMP.W   #IOFF+20,D0     ; LONG
  2503.     BNE.S   .GT2
  2504.     MOVEQ   #4,D0
  2505.     BRA.S   .GTE
  2506. .GT2:   CMP.W   #IOFF+21,D0     ; INT
  2507.     BNE.S   .GT3
  2508.     MOVEQ   #2,D0
  2509.     BRA.S   .GTE
  2510. .GT3:   CMP.W   #IOFF+22,D0     ; CHAR
  2511.     BNE.S   .MUT
  2512.     MOVEQ   #1,D0
  2513. .GTE:   MOVE.L  D0,OPTRTYPE(A0)
  2514.     BSET    #1,OFLAGS(A0)
  2515.     RTS
  2516. .MUT:   CMP.W   #45,D0          ; MUTUALLY RECURSIVE PTR TO <OBJ>
  2517.     BNE ERROR33
  2518.     MOVE.L  D1,-(A7)
  2519.     MOVE.L  (A3)+,D1
  2520.     BSR FINDOBJ
  2521.     TST.L   D0
  2522.     BEQ ERROR42
  2523.     MOVE.L  (A7)+,D1
  2524.     BRA.S   .GTE
  2525. ;*-*
  2526. ;*-*
  2527.  
  2528. ;; 56               OptiIF
  2529. OPTIIF:               ; 56
  2530.     cmp.l   #$488048c0,-4(a4)    ; ext.w ext.l
  2531.     bne     .2
  2532.     moveq   #4,d0
  2533.     subq.l  #4,a4
  2534.     bra     .dosth
  2535. .2: cmp.w   #$49c0,-2(a4)        ; extb.l
  2536.     bne     .4 ;.3
  2537.     moveq   #2,d0
  2538.     subq.l  #2,a4
  2539.     bra     .dosth
  2540.  
  2541. .4:
  2542.     MOVE.L  (A2)+,(A4)+
  2543.     move.w  (a2)+,(A4)+
  2544.     bra JOBLOOP
  2545.  
  2546. .dosth:
  2547.     move.w  -2(a4),d1      ; check for
  2548.     and.l   #$f0ff,d1      ; Scc D0
  2549.     cmp.w   #$50c0,d1      ; found one?
  2550.     beq     .dosth2
  2551.     add.l   d0,a4
  2552.     bra     .4
  2553. .dosth2:
  2554. ;    move.w  -(a4),d1       ; skip back..
  2555. ;    cmp.w   #$56c0,d1      ; do we have a SNE D0?
  2556. ;    bne     .skp           ;
  2557. ;    cmp.w   #$4a80,-2(a4)  ; check for TST.L D0...
  2558. ;    bne     .skp           ;
  2559. ;    subq.l  #2,a4          ; skip..?
  2560. .skp:
  2561.    move.w   -(a4),d1
  2562.     and.l   #$0f00,d1
  2563.     or.l    #$6000,d1
  2564.     eori.w  #$100,d1
  2565.     move.w  d1,(a4)+
  2566.     clr.w   (a4)+
  2567.     addq.l  #6,a2
  2568.     bra     JOBLOOP
  2569.  
  2570. .TC1:
  2571.     move.l  -4(a4),d0
  2572.     tst.l   -4(a4)
  2573.     beq     .TC1
  2574. ;*-*
  2575. ;; 57
  2576. DOELSECH:             ; 57
  2577.     MOVE.W  #1,ELSECHECK
  2578.     BRA JOBLOOP
  2579. ;*-*
  2580. ;; 58               RETURN
  2581. DORETURN:             ; 58
  2582.     TST.L   HANDLERPEA
  2583.     BEQ.S   .2
  2584.     TST.L   ENDPEA
  2585.     BNE.S   .2
  2586.     LEA .3(PC),A0
  2587.     MOVE.L  (A0)+,(A4)+
  2588.     MOVE.L  (A0)+,(A4)+
  2589.     MOVE.L  (A0)+,(A4)+
  2590. .2: TST.W   PROCF
  2591.     BEQ ERROR9
  2592.     MOVE.L  .1(PC),(A4)+
  2593.     MOVE.L  PROCEND(PC),D0
  2594.     CLR.W   NEWOP
  2595.     BSR ADDBRANCH
  2596.     BRA JOBLOOP
  2597. .1: BRA DORETURN
  2598. .3: MOVE.L  (A7)+,-88(A4)       ; (A5) ; ook: EXCEPT/Raise()
  2599.     MOVE.L  (A7)+,-76(A4)       ; PUT PREVIOUS HANDLER BACK (CODE)
  2600.     MOVE.L  (A7)+,-80(A4)       ; (STACK)
  2601. ;*-*
  2602. ;; 59
  2603. MAKEBRANCHL:          ; 59, like 8
  2604.     MOVE.L  LABPRES,D0
  2605.     MOVE.W  .1(PC),NEWOP
  2606.     BSR ADDBRANCH
  2607.     BRA JOBLOOP
  2608. .1: JMP .1
  2609. ;*-*
  2610. ;; 60
  2611. JOBINSIF:             ; 60
  2612.     TST.W   EXPRECC
  2613.     BNE.S   .1
  2614.     BSR.W   DOINSREC
  2615.     BRA JOBLOOP
  2616. .1: BSR EXP
  2617.     BRA JOBLOOP
  2618. ;*-*
  2619. ;; 61               IF
  2620. JOBEXPIF:             ; 61
  2621.     MOVE.L  LABPRES(PC),-(A7)
  2622.     BSR EXP
  2623.     MOVE.L  (A7)+,LABPRES
  2624.     BRA JOBLOOP
  2625. ;*-*
  2626. ;; 62               STEP
  2627. JOBFORSTEP:           ; 62
  2628.     move.l  -(a5),a1
  2629.     move.l  a1,.ID
  2630.     move.w  .CD(pc),(a4)+
  2631.     jsr     GVA1D2_0
  2632.     move.l  -(a5),d0
  2633.     move.l  .CD2,(a4)+
  2634.     bsr     ADDBRANCH
  2635.     move.w  .CD3(pc),(a4)+
  2636.     move.l  .ID,a1
  2637.     jsr     GVA1D2_9
  2638.     move.l  .CD4(PC),(a4)+
  2639.     move.l  -(a5),d0
  2640.     jsr     ADDBRANCH
  2641.     bra     JOBLOOP
  2642.  
  2643. .ID:dc.l    0
  2644. .CD:move.l  12(a5),d0
  2645. .CD2:add.l  .CD2(pc),d0
  2646. .CD3:move.l d0,12(a5)
  2647. .CD4:bra    .CD4
  2648. ;*-*
  2649. ;; 63
  2650. HANDLEPROC:           ; 63
  2651.     CLR.L   ENDPEA
  2652.     CMP.W   #IOFF+56,(A3)
  2653.     BNE.S   .2
  2654.     ADDQ.L  #2,A3
  2655.     MOVE.W  #-1,HANDLEFLAG
  2656.     MOVE.L  .3(PC),(A4)+
  2657.     BRA JOBLOOP
  2658. .2: CLR.L   HANDLERPEA
  2659.     BRA JOBLOOP
  2660. .3: MOVEM.L D3-D7,-(A7)
  2661.  
  2662. HANDLEPROCREALLY:
  2663.     LEA .1(PC),A0
  2664.     MOVE.L  (A0)+,(A4)+
  2665.     MOVE.L  (A0)+,(A4)+
  2666.     MOVE.L  (A0)+,(A4)+
  2667.     MOVE.L  (A0)+,(A4)+
  2668.     MOVE.L  (A0)+,(A4)+
  2669.     MOVE.L  A4,HANDLERPEA
  2670.     MOVE.L  (A0)+,(A4)+
  2671.     MOVE.L  (A0)+,(A4)+
  2672.     RTS
  2673. .1: MOVE.L  -80(A4),-(A7)       ; STACK
  2674.     MOVE.L  -76(A4),-(A7)       ; CODE
  2675.     MOVE.L  -88(A4),-(A7)       ;
  2676.     MOVE.L  A7,-80(A4)
  2677.     LEA .1(PC),A0       ; TOTAL SIZE=5*.L, OFF=14
  2678.     MOVE.L  A0,-76(A4)
  2679.     MOVE.L  A5,-88(A4)
  2680.  
  2681. HANDLERPEA: DC.L    0
  2682. ENDPEA:     DC.L    0
  2683. ;*-*
  2684. ;; 64               EXCEPT
  2685. DOEXCEPT:             ; 64
  2686.     MOVEQ   #0,D1           ; D1=DOFLAG
  2687.     CMP.W   #IOFF+28,(A3)
  2688.     BNE.S   .1
  2689.     MOVEQ   #1,D1
  2690.     ADDQ.L  #2,A3
  2691. .1: LEA EREST(PC),A0
  2692.     MOVE.L  (A0)+,(A4)+
  2693.     MOVE.L  (A0)+,(A4)+
  2694.     MOVE.L  (A0)+,(A4)+
  2695.     TST.L   D1
  2696.     BEQ.S   .2
  2697.     ADDQ.L  #4,A0           ; TAKE THE CLR INSTEAD OF BRA
  2698. .2: MOVE.L  (A0)+,(A4)+
  2699.     MOVE.L  A4,ENDPEA
  2700.     MOVE.L  HANDLERPEA,D0
  2701.     BEQ ERROR47
  2702.     MOVE.L  D0,A0
  2703.     SUB.L   A4,D0
  2704.     NEG.L   D0
  2705.     ADDQ.L  #2,D0
  2706.     MOVE.W  D0,-2(A0)
  2707.     BRA JOBLOOP
  2708. EREST:  MOVE.L  (A7)+,-88(A4)       ; (A5) ; ook: RETURN/Raise()
  2709.     MOVE.L  (A7)+,-76(A4)       ; PUT PREVIOUS HANDLER BACK (CODE)
  2710.     MOVE.L  (A7)+,-80(A4)       ; (STACK)
  2711.     BRA EREST           ; TO ENDPROC
  2712.     CLR.L   -84(A4)
  2713. ;*-*
  2714. ;; 65               ENDPROC [HANDLE]
  2715. CLOSEHANDLER:         ; 65
  2716.     TST.L   HANDLERPEA
  2717.     BEQ.S   .1
  2718.     MOVE.L  ENDPEA,D0
  2719.     BEQ ERROR47
  2720.     MOVE.L  D0,A0
  2721.     CMP.W   #-84,-2(A0)     ; CLR INSTEAD OF BRA
  2722.     BEQ.S   .1
  2723.     SUB.L   A4,D0
  2724.     NEG.L   D0
  2725.     ADDQ.L  #2,D0
  2726.     MOVE.W  D0,-2(A0)
  2727. .1: BRA JOBLOOP
  2728. ;*-*
  2729. ;; 66               PUSHTYPE
  2730. PUSHTYPE:             ; 66
  2731.     MOVE.W  TYPELAB(PC),(A5)+
  2732.     BRA JOBLOOP
  2733. ;*-*
  2734. ;; 67               POPTYPE
  2735. POPTYPE:              ; 67
  2736.     MOVE.W  -(A5),TYPELAB
  2737.     BRA JOBLOOP
  2738. ;*-*
  2739. ;; 68               RTS/RTD
  2740. RTSRTD:               ; 68
  2741.     CMP.W   #IOFF+78,(A3)
  2742.     BEQ .WITH
  2743.     MOVE.W  NRARG(PC),D0
  2744.     BEQ.S   .RTS
  2745.     MOVE.W  .RTD(PC),(A4)+
  2746.     LSL.W   #2,D0
  2747.     MOVE.W  D0,(A4)+
  2748.     BRA JOBLOOP
  2749. .RTS:   MOVE.W  PROCRTS(PC),(A4)+
  2750.     BRA JOBLOOP
  2751. .RTD:   RTD #4
  2752. .WITH:
  2753.     ADDQ.L  #2,A3
  2754.     MOVE.W  (A3)+,D0
  2755.     CMP.W   #$100+47,D0
  2756.     BEQ .RTR
  2757.     CMP.W   #$100+48,D0
  2758.     BNE ERROR90
  2759.     MOVE.W  .1(PC),(A4)+
  2760.     TST.W   (A3)+
  2761.     BNE ERROR0
  2762.     BRA JOBLOOP
  2763. .RTR:
  2764.     MOVE.W  .2(PC),(A4)+
  2765.     TST.W   (A3)+
  2766.     BNE ERROR0
  2767.     BRA JOBLOOP
  2768. .1: RTE
  2769. .2: RTR
  2770. .3:
  2771. ;*-*
  2772. ;; 69
  2773. DONEW:                ; 69
  2774.     ;SUBQ.L #2,A3
  2775.     MOVEQ   #1,D0
  2776.     BSR NEWEXP
  2777.     BRA JOBLOOP
  2778. ;*-*
  2779. ;; 70               RETURN / PROC xx IS
  2780. EXPECTRETURNIS:           ; 70
  2781.     MOVE.W  (A3),D0
  2782.     CMP.W   #IOFF+51,D0
  2783.     BEQ.S   .1
  2784.     CMP.W   #IOFF+62,D0
  2785.     BEQ.S   .1
  2786. .2: TST.W   (A2)+
  2787.     BNE.S   .2
  2788.     SUBQ.L  #2,A2
  2789.     BRA JOBLOOP
  2790. .1: ADDQ.L  #2,A3
  2791.     BRA JOBLOOP
  2792.  
  2793.  
  2794. BEGL2:  MACRO
  2795.     CMP.W   #21,(A3)+
  2796.     BNE ERROR12
  2797.  
  2798.     ;MOVE.W LINENUM(PC),-(A7)
  2799.  
  2800.     MOVE.W  (A3)+,LINENUM
  2801.     MOVE.L  A3,INTERMED
  2802.  
  2803.     ;TST.L  LINEBUF
  2804.     ;BEQ.S  .ALB
  2805.     ;CMP.W  LINENUM(PC),(A7)
  2806.     ;BEQ.S  .ALB
  2807.     ;BSR    ADDLINEDBG
  2808. ;.ALB:  ADDQ.L  #2,A7
  2809.  
  2810.     ENDM
  2811.  
  2812. BEGL1:  MACRO
  2813.     TST.W   (A3)+
  2814.     BNE ERROR12
  2815.     ENDM
  2816.  
  2817. BEGL:   MACRO
  2818.     BEGL1
  2819.     BEGL2
  2820.     ENDM
  2821.  
  2822. BLOCK:  MACRO               ; \1=ID, \2=IOFF1, \3=IOFF2, \4=IOFF3
  2823.     MOVEM.L D5-D7/A6,-(A7)
  2824.     BEGL1
  2825. .CCCL:  BSR WRITELINENUM        ; TRASHES D7
  2826.     BEGL2
  2827.     MOVE.W  (A3)+,D7
  2828.     CMP.W   \2,D7
  2829.     BEQ .CCCC
  2830.     CMP.W   \3,D7
  2831.     BEQ .CCCC
  2832.     CMP.W   \4,D7
  2833.     BEQ .CCCC
  2834.     BRA.S   .CCCN
  2835. .CCCC:  CMP.W   \1,-2(A5)
  2836.     BNE.S   .CCCN
  2837.     SUBQ.L  #2,A3
  2838.     BRA.S   .CCCO
  2839. .CCCN:  BSR DOINSMAIN
  2840.     MOVE.L  A4,CURACODE
  2841.     JSR CHECK3
  2842.     BRA.S   .CCCL
  2843. .CCCO:  MOVEM.L (A7)+,D5-D7/A6
  2844.     ENDM
  2845.  
  2846. BLOCK2: MACRO               ; note: same as BLOCK, without 3x check
  2847.     MOVEM.L D5-D7/A6,-(A7)
  2848.     BEGL1
  2849. .CCCL:  BSR WRITELINENUM        ; TRASHES D7
  2850.     BEGL2
  2851.     MOVE.W  (A3)+,D7
  2852.     CMP.W   \2,D7
  2853.     BEQ .CCCC
  2854.     BRA.S   .CCCN
  2855. .CCCC:  CMP.W   \1,-2(A5)
  2856.     BNE.S   .CCCN
  2857.     SUBQ.L  #2,A3
  2858.     BRA.S   .CCCO
  2859. .CCCN:  BSR DOINSMAIN
  2860.     MOVE.L  A4,CURACODE
  2861.     JSR CHECK3
  2862.     BRA.S   .CCCL
  2863. .CCCO:  MOVEM.L (A7)+,D5-D7/A6
  2864.     ENDM
  2865.  
  2866. RANGC:  MACRO               ; \1=DX
  2867.     TST.L   \1
  2868.     BMI ERROR31
  2869.     CMP.L   D7,\1
  2870.     BPL ERROR31
  2871.     ENDM
  2872.  
  2873. PUTRA:  MACRO               ; \1=DX,\2=TRASH.DX
  2874.     MOVE.L  \1,\2
  2875.     LSL.L   #1,\2
  2876.     TST.W   0(A6,\2.L)
  2877.     BNE ERROR50
  2878.     MOVE.W  D0,0(A6,\2.L)
  2879.     ENDM
  2880. ;*-*
  2881. ;; 71               SELECT OF
  2882. SELECTOF:             ; 71
  2883.     BSR     ASM_GRABVALUE
  2884.     TST.L   D0
  2885.     BMI JOBLOOP
  2886.     MOVE.L  D1,D7
  2887. ;    CMP.W   #VALUE,(A3)
  2888. ;    BNE JOBLOOP
  2889. ;    ADDQ.L  #2,A3
  2890. ;    MOVE.L  (A3)+,D7        ; D7=RANGE
  2891.     CMP.L   #1,D7
  2892.     BMI ERROR31
  2893.     CMP.L   #1024,D7
  2894.     BPL ERROR31
  2895.     CMP.W   #IOFF+45,(A3)+
  2896.     BNE ERROR0
  2897.     MOVE.L  D7,-(A7)
  2898.     BSR EXP
  2899.     MOVE.L  (A7)+,D7
  2900.     BSR NEWLABEL
  2901.     MOVE.L  D0,D5           ; D5=ENDLABEL
  2902.     BSR NEWLABEL
  2903.     MOVE.L  D0,D6           ; D6=DEFAULTLABEL
  2904.     MOVE.L  .C1(PC),(A4)+
  2905.     CLR.W   (A4)+
  2906.     CLR.W   NEWOP
  2907.     BSR ADDBRANCH
  2908.     MOVE.W  .C2(PC),(A4)+
  2909.     MOVE.L  D7,(A4)+
  2910.     MOVE.L  .C3(PC),(A4)+
  2911.     MOVE.L  D6,D0
  2912.     BSR ADDBRANCH
  2913.     MOVE.W  .C4(PC),(A4)+
  2914.     MOVE.L  .C5A(PC),(A4)+
  2915.     MOVE.L  .C5B(PC),(A4)+
  2916.     MOVE.L  A4,A6           ; A6=TABLESTART
  2917.     MOVE.L  D7,D0
  2918.     SUBQ.L  #1,D0
  2919.     MOVEQ   #0,D1
  2920. .FILL:  MOVE.W  D1,(A4)+
  2921.     DBRA    D0,.FILL
  2922.     BEGL
  2923.     MOVE.W  #8,(A5)+        ; SELECT_OF IDENT
  2924. .XL:MOVE.W  (A3)+,D0        ; PARSE ANY #OF CASE'S UNTIL DEF/ENDSEL
  2925.     CMP.W   #IOFF+11,D0
  2926.     BEQ .DEFA
  2927.     CMP.W   #IOFF+12,D0
  2928.     BEQ .ENDS
  2929.     CMP.W   #IOFF+10,D0
  2930.     BNE ERROR0
  2931.     MOVE.L  A4,D0
  2932.     SUB.L   A6,D0           ; D0=CURRENT OFFSET
  2933.     BRA.S   .RST
  2934. .RANGL: MOVE.L  (A3)+,D1        ; D1=1STVALUE
  2935.     CMP.W   #IOFF+39,(A3)
  2936.     BEQ.S   .RR
  2937.     RANGC   D1
  2938.     PUTRA   D1,D2
  2939.     BRA.S   .RNEXT
  2940. .RR:    ADDQ.L  #2,A3
  2941.     CMP.W   #VALUE,(A3)+
  2942.     BNE ERROR30
  2943.     MOVE.L  (A3)+,D2        ; D2=ENDVALUE
  2944.     RANGC   D1
  2945.     RANGC   D2
  2946.     CMP.W   D1,D2
  2947.     BMI ERROR50
  2948. .TOL:   PUTRA   D1,D3
  2949.     ADDQ.L  #1,D1
  2950.     CMP.L   D2,D1
  2951.     BLE.S   .TOL
  2952. .RNEXT: CMP.W   #COM,(A3)
  2953.     BNE.S   .RDONE
  2954.     ADDQ.L  #2,A3
  2955. .RST:   CMP.W   #VALUE,(A3)+
  2956.     BNE ERROR30
  2957.     BRA.S   .RANGL
  2958. .RDONE: BLOCK   #8,#IOFF+10,#IOFF+11,#IOFF+12
  2959.     MOVE.L  .C6(PC),(A4)+
  2960.     CLR.W   NEWOP
  2961.     MOVE.L  D5,D0
  2962.     BSR ADDBRANCH
  2963.     BRA .XL
  2964. .DEFA:  BSR .FDEF
  2965.     BSR AAAAAA
  2966.     ADDQ.L  #2,A3
  2967.     BRA.S   .ENDS2
  2968. .ENDS:  BSR .FDEF
  2969. .ENDS2: BSR STOPJOB
  2970.     MOVE.L  D5,D0
  2971.     BSR ADDLABEL
  2972.     CMP.W   #8,-(A5)
  2973.     BNE ERROR9
  2974.     BRA JOBLOOP
  2975. .FDEF:  MOVE.L  D6,D0
  2976.     BSR ADDLABEL
  2977.     MOVE.L  A4,D0
  2978.     SUB.L   A6,D0
  2979.     MOVE.L  A6,A0
  2980.     MOVE.L  D7,D1
  2981.     SUBQ.L  #1,D1
  2982. .FDL:   TST.W   (A0)+
  2983.     BNE.S   .NEXT
  2984.     MOVE.W  D0,-2(A0)
  2985. .NEXT:  DBRA    D1,.FDL
  2986.     RTS
  2987. .C1:    TST.L   D0
  2988.     BMI .C1
  2989. .C2:    CMP.L   #1,D0
  2990. .C3:    BPL .C1
  2991. .C4:    LSL.L   #1,D0
  2992. .C5A:   MOVE.W  .C6(PC,D0.L),D0
  2993. .C5B:   JMP .C6(PC,D0.W)
  2994. .C6:    ; TABLE START
  2995.     BRA .C2
  2996. AAAAAA: BLOCK2  #8,#IOFF+12
  2997.     RTS
  2998. ;*-*
  2999. ;; 72               OF object
  3000. EXPECTOFOBJECT:           ; 72
  3001.     cmp.w   #IOFF+93,(a3)
  3002.     bne     .1
  3003.     addq.l  #2,a3
  3004. .1: CMP.W   #IOFF+45,(A3)
  3005.     BNE JOBLOOP
  3006.     ADDQ.L  #2,A3           ; of_object
  3007.     CMP.W   #31,(A3)+
  3008.     BNE ERROR40
  3009.     MOVE.L  (A3)+,A0        ; A0=OBJ
  3010.     MOVE.L  COMPILEPROC(PC),A6
  3011.     MOVE.L  22(A6),A1
  3012.     BTST    #1,9(A1)
  3013.     BNE ERROR55
  3014.     MOVE.L  18(A6),A6       ; A6=SELF
  3015.     MOVE.L  A0,(A6)         ; SET SELF AS PTR TO OBJ
  3016.     MOVE.W  .CODE(PC),(A4)+
  3017.     JSR GVA6D0_9
  3018.     BRA JOBLOOP
  3019. .CODE:  MOVE.L  A0,2(A5)
  3020. ;*-*
  3021. ;; 73
  3022. SAVEREGSPROC:         ; 73
  3023.     MOVE.L  COMPILEPROC(PC),A0  ; COMPUTE MOVEMMASK
  3024.     MOVE.B  3(A0),D0
  3025.     BEQ.S   .NR
  3026.     EXT.W   D0
  3027.     SUBQ.W  #1,D0
  3028.     MOVEQ   #7,D1
  3029.     MOVEQ   #0,D2
  3030. .XL:BSET    D1,D2
  3031.     SUBQ.W  #1,D1
  3032.     DBRA    D0,.XL
  3033.     MOVE.W  D2,PROCMASK
  3034.     SAVER   #-1,D0
  3035.     MOVE.W  D0,PROCMASKREV
  3036. .NR:    BRA JOBLOOP
  3037. ;*-*
  3038. ;; 74               END
  3039. DOEND:                ; 74
  3040.     MOVE.W  #-1,.ISM
  3041.     CMP.W   #IDENT,(A3)+
  3042.     BNE ERROR6
  3043.     MOVE.L  (A3)+,A0        ; A0=IDENT
  3044.     TST.B   4(A0)
  3045.     BEQ ERROR22
  3046.     CMP.B   #LAB,4(A0)
  3047.     BEQ ERROR6
  3048.  
  3049.     MOVE.L  (A0),D0         ; D0=OBJECTSIZE
  3050.     SUB.L   A6,A6           ; A6=OBJECT | NIL
  3051.     CMP.L   #5,D0
  3052.     BMI.S   .0
  3053.     MOVE.L  D0,A6
  3054.     MOVE.W  OSIZE(A6),D0
  3055.     EXT.L   D0
  3056.  
  3057.     CMP.W   #35,(A3)
  3058.     BNE.S   .0
  3059.     CMP.W   #39,2(A3)
  3060.     BNE .0
  3061.     ADDQ.L  #4,A3
  3062.     MOVE.L  (A3)+,A1        ; A1=MEMBER
  3063.     BSR FINDMEMBER      ; D1=TRASH,a1=first->REAL,a6=obj
  3064.     MOVE.W  OOFF(A1),.ISM
  3065.     BTST    #1,OFLAGS(A1)
  3066.     BEQ ERROR40
  3067.     CMP.W   #4,OSIZE(A1)
  3068.     BNE ERROR40
  3069.     SUB.L   A6,A6
  3070.     MOVE.L  OPTRTYPE(A1),D0
  3071.     BEQ.W   ERROR40
  3072.     BMI.S   .OO
  3073.     CMP.L   #5,D0
  3074.     BMI.S   .CON
  3075. .OO:    MOVE.L  D0,A6
  3076.     MOVE.W  OSIZE(A6),D0
  3077.     EXT.L   D0
  3078. .CON:
  3079.     MOVE.W  .ST2(PC),(A4)+
  3080.     JSR GVA0D1_0
  3081.     MOVE.W  .ST3(PC),(A4)+
  3082.     MOVE.W  .ISM(PC),(A4)+
  3083.     BRA.S   .XB
  3084. .0:
  3085.     MOVE.W  .ST(PC),(A4)+
  3086.     JSR GVA0D1_0
  3087. .XB:MOVE.L  A4,.BEQS
  3088.     MOVE.L  .BEQ(PC),(A4)+
  3089.  
  3090.     MOVE.L  A6,D1
  3091.     BEQ.S   .ND
  3092.     BSR DESTR
  3093. .ND:
  3094.     CMP.W   #29,(A3)
  3095.     BNE.S   .1
  3096.     TST.L   D0
  3097.     BMI ERROR50
  3098.     ADDQ.L  #6,A3           ; ALSO SKIP ]OFFSET
  3099.     MOVEM.L A0/D0/A6,-(A7)      ; END p[exp]
  3100.     BSR EXP
  3101.     MOVEM.L (A7)+,A0/D0/A6
  3102.     CMP.W   #30,(A3)+
  3103.     BNE ERROR34
  3104.     CMP.W   #1,D0
  3105.     BEQ.S   .NM
  3106.     CMP.W   #2,D0
  3107.     BNE.S   .N1
  3108.     MOVE.W  .LSL1(PC),(A4)+
  3109.     BRA.S   .NM
  3110. .N1:    CMP.W   #4,D0
  3111.     BNE.S   .N2
  3112.     MOVE.W  .LSL2(PC),(A4)+
  3113.     BRA.S   .NM
  3114. .N2:    MOVE.W  .M(PC),(A4)+
  3115.     MOVE.W  D0,(A4)+
  3116. .NM:    MOVE.W  .S1(PC),(A4)+
  3117.     BRA.S   .2
  3118. .1: TST.L   D0
  3119.     BMI.S   .1B
  3120.     MOVE.W  .S2(PC),(A4)+       ; just END p
  3121.     MOVE.W  D0,(A4)+
  3122.     BRA.W   .2
  3123. .1B:    ;MOVE.W .S1(PC),(A4)+
  3124. .2: MOVE.L  A0,-(A7)
  3125.     MOVEQ   #109+10,D0      ; D0=FASTDISPOSE
  3126.     MOVE.B  #-1,EFUNCBYTE+109   ; fastdispose=110
  3127.     MOVE.L  .4(PC),(A4)+        ; GEN CALL
  3128.     TSTMOD
  3129.     BNE.S   .MOD
  3130.     MOVE.W  .5(PC),NEWOP
  3131.     BSR ADDBRANCH
  3132.     BRA.S   .CC
  3133. .MOD:   SUBQ.L  #4,A4
  3134.     MOVE.W  .5(PC),(A4)+
  3135.     BSR ADDBRANCHRELOC
  3136.     MOVE.W  D0,-2(A4)
  3137. .CC:    MOVE.L  (A7)+,A0
  3138.     MOVE.W  .A(PC),(A4)+
  3139.     BSR .NUKEV
  3140.     MOVE.L  .BEQS(PC),A1
  3141.     MOVE.L  A4,D0
  3142.     SUB.L   A1,D0
  3143.     SUBQ.L  #2,D0
  3144.     MOVE.B  D0,1(A1)
  3145.     CMP.W   #COM,(A3)+
  3146.     BEQ DOEND
  3147.     SUBQ.L  #2,A3
  3148.     BRA JOBLOOP
  3149. .ISM:   DC.W    0
  3150. .M: MULU    #6,D0
  3151. .LSL1:  LSL.L   #1,D0
  3152. .LSL2:  LSL.L   #2,D0
  3153. .S1:    MOVE.L  D0,-(A7)
  3154. .S2:    PEA 1.W
  3155. .A: ADDQ.L  #8,A7
  3156. .5: JSR .M
  3157. .4: BSR.W   .M
  3158. .ST:    MOVE.L  2(A5),D0
  3159. .ST2:   MOVE.L  2(A5),A0
  3160. .ST3:   MOVE.L  4(A0),D0
  3161. .BEQ:   BEQ.S   .A
  3162.     MOVE.L  D0,-(A7)
  3163. .BEQS:  DC.L    0
  3164.  
  3165. .NUKEV: MOVE.W  .ISM(PC),D0
  3166.     BPL.S   .INUKE
  3167.     MOVE.W  .NUKE(PC),(A4)+
  3168.     JMP GVA0D1_0
  3169. .INUKE: MOVE.W  .NUKE2(PC),(A4)+
  3170.     JSR GVA0D1_0
  3171.     MOVE.W  .NUKE3(PC),(A4)+
  3172.     MOVE.W  D0,(A4)+
  3173.     RTS
  3174. .NUKE:  CLR.L   2(A5)
  3175. .NUKE2: MOVE.L  2(A5),A0
  3176. .NUKE3: CLR.L   4(A0)
  3177.  
  3178. DESTR:  MOVE.W  ODESTR(A6),D2       ; GETS OBJ=A6, OSIZE=D0
  3179.     BMI.W   .XX         ; D2=ENDOFF
  3180.     MOVE.W  .7(PC),(A4)+
  3181.     BSR.S   .GEND
  3182.     MOVE.W  .6A(PC),(A4)+
  3183.     MOVE.W  D2,(A4)+
  3184.     MOVE.W  .6B(PC),(A4)+
  3185. .XX:    TST.W   ODEL(A6)
  3186.     BEQ.S   .XXX
  3187.     MOVE.W  .GS(PC),(A4)+
  3188.     BSR.S   .GEND
  3189.     MOVE.W  .GS2(PC),(A4)+
  3190.     MOVEQ   #-1,D0          ; SIGNAL SIZE ALREADY on (A7)
  3191. .XXX:   RTS
  3192. .GS:    MOVE.L  (A7),A0
  3193. .GS2:   MOVE.L  (A1),-(A7)
  3194. .7: MOVEA.L D0,A0
  3195. .6: MOVE.L  (A0),A1
  3196. .6X:    MOVE.L  2(A0),A1
  3197. .6A:    MOVE.L  4(A1),A1
  3198. .6B:    JSR (A1)
  3199. .GEND:  TST.W   ODELOFF(A6)
  3200.     BMI ERROR71
  3201.     BHI .U
  3202.     MOVE.W  .6(PC),(A4)+
  3203.     RTS
  3204. .U: MOVE.W  .6X(PC),(A4)+
  3205.     MOVE.W  ODELOFF(A6),(A4)+
  3206.     RTS
  3207. ;*-*
  3208. ;; 75               do EXIT
  3209. ; GETS BRANCH TO FILL AT -2(A4)
  3210.  
  3211. FILLEXIT:             ; 75
  3212.     MOVE.W  -2(A5),D0
  3213.     CMP.W   #3,D0
  3214.     BNE.S   .1
  3215.     MOVE.L  -10(A5),D0
  3216.     BRA.S   .D
  3217. .1:
  3218.     CMP.W   #4,D0
  3219.     BNE ERROR0
  3220.     MOVE.L  -4-4-4-4-2(a5),d0
  3221. .D: BCHG    #0,-4(A4)       ; negate CC
  3222.     CLR.W   NEWOP
  3223.     BSR ADDBRANCH
  3224.     BRA JOBLOOP
  3225. ;*-*
  3226. ;; 76               do SUPER
  3227. DOSUPER:              ; 76
  3228.     BSR SUPEREXP
  3229.     BRA JOBLOOP
  3230. ;*-*
  3231. ;; 77               Fix stack
  3232. FIXUPSTACK:
  3233.     MOVE.L  FIXUPSTACKREGS,D0
  3234.     BEQ .X
  3235.     ADDQ.L  #1,D0
  3236.     LSL.L   #2,D0
  3237.     MOVE.W  .c,(A4)+
  3238.     MOVE.W  D0,(A4)+
  3239.     MOVE.L  .r(PC),(A4)+
  3240. .X:
  3241.     BRA JOBLOOP
  3242. .c: LEA 0(A7),A7
  3243. .r: MOVEM.L (A7)+,D2-D7/A2-A6
  3244. ;*-*
  3245. ;; 78               Fix FOR stack
  3246. FIXFORSTACK:
  3247.    RTS
  3248. FIXFORSTACKSIZE:
  3249.     DC.W    0
  3250. ;*-*
  3251. ;; 79               Section
  3252. JOB_SECTION:
  3253.     BTST        #2,CODEPREFS+3
  3254.     BEQ         ERROR44
  3255.     MOVE.L      HunkList,A0
  3256.     MOVE.L      A4,H_END(A0)
  3257.     move.l      a0,d0
  3258.  
  3259.     CMP.W   #IOFF+84,(A3)+
  3260.     BNE     .1
  3261.     MOVE.L  #$3E9,D1
  3262.     BRA     .X
  3263. .1: CMP.W   #IOFF+85,-2(A3)
  3264.     BNE     ERROR97
  3265.     MOVE.L  #$3EA,D1
  3266. .X: CMP.W   #COM,(A3)
  3267.     BNE     .XX
  3268.     ADDQ.L  #2,A3
  3269.     CMP.W   #IOFF+86,(A3)+
  3270.     BNE     .X2
  3271.     bset    #30,d1
  3272.     BRA     .XX
  3273. .X2:CMP.W   #IOFF+87,-2(A3)
  3274.     BNE     ERROR97
  3275.     BSET    #31,D1
  3276. .XX:
  3277.     GETM        A0
  3278.     MOVE.L      HunkList(PC),(A0)+
  3279.     MOVE.L      A0,HunkList
  3280.     exg.L       A0,D0
  3281.     move.l      d0,H_PREV(A0)
  3282.     exg.l       a0,d0
  3283.     MOVE.L      A4,(A0)+
  3284.     move.l      D1,(a0)+
  3285.     clr.l       (a0)+
  3286.     clr.l       (a0)+
  3287.     clr.l       (a0)+
  3288.     DONEM       A0
  3289.     ADDQ.L      #1,NumHunks
  3290.     bra         JOBLOOP
  3291. ;*-*
  3292. ;; 80               Automatic procedure
  3293. JOB_AUTOPROC:
  3294.     CMP.W   #IOFF+90,(A3)
  3295.     BMI     JOBLOOP
  3296.     CMP.W   #IOFF+91,(A3)
  3297.     BGT     JOBLOOP
  3298.     TSTMOD
  3299.     BEQ     ERROR49
  3300.     MOVE.L  COMPILEPROC(PC),A0
  3301.     TST.W   (A0)
  3302.     BNE     ERROR23
  3303.     BTST    #1,2(A0)
  3304.     BNE     ERROR39
  3305.  
  3306.     MOVEQ   #0,D0
  3307.     MOVE.W  (A3)+,D0
  3308.     SUB.W   #IOFF+90-6,D0
  3309.     BSET    D0,2(A0)
  3310.     MOVE.L  14(A0),A0
  3311.     BSET    #2,5(A0)
  3312.     BRA JOBLOOP
  3313. ;*-*
  3314. ;; 81               optimize cache line
  3315. JOB_OPTCACHE:
  3316.     bsr     OPTCACHELINE
  3317.     bra     JOBLOOP
  3318. ;*-*
  3319. ;*-*
  3320.  
  3321. JOBROUTTAB:
  3322.     DC.L    JOBOUT,GETPARAMLABEL,JOBEXP,GETPARAMVAR,GETCOMMA; 0
  3323.     DC.L    SAVESTIDENT,FORWARDREFERENCE,CHECKSTIDENT       ; 5
  3324.     DC.L    MAKEBRANCH,COPY2,COPY4,COPYN,COPY6,COPY8        ; 8
  3325.     DC.L    COPY10,REMEMBERLAB,EXPORNILL,PROCFLAGON         ; 14
  3326.     DC.L    PROCFLAGOFF,CHECK2LAB,REMINDCURPOS,POPLAB       ; 18
  3327.     DC.L    INSERTVAROFF,PUSHVAR,POPVAR,PUSHLAB             ; 22
  3328.     DC.L    PUSHLAB2,POPLAB2,NEWLAB2,MAKEBRANCH2            ; 26
  3329.     DC.L    SETFLAG,SKIPFLAG,CLEARFLAG,SKIPDEFLOCAL,GETNRLOC; 30
  3330.     DC.L    INSERTVAROFFDEST,GETBRACKLEFT,GETBRACKRIGHT     ; 35
  3331.     DC.L    DOINCBIN,DOLONG,DOINT,DOCHAR,JOBINS,EXPECT      ; 38
  3332.     DC.L    SERROR,EXPECT2,JOBSKIP,EXPECTASSIGN,EXPECTTO    ; 44
  3333.     DC.L    DOMIDFOR,ENDGLOBVAR,ELSEMAKELAB,ELSEUSELAB      ; 49
  3334.     DC.L    ELSEDEFLAB,ELSEWAISTELAB,DOOBJECT,OPTIIF        ; 53
  3335.     DC.L    DOELSECH,DORETURN,MAKEBRANCHL,JOBINSIF,JOBEXPIF ; 57
  3336.     DC.L    JOBFORSTEP,HANDLEPROC,DOEXCEPT,CLOSEHANDLER     ; 62
  3337.     DC.L    PUSHTYPE,POPTYPE,RTSRTD,DONEW,EXPECTRETURNIS    ; 66
  3338.     DC.L    SELECTOF,EXPECTOFOBJECT,SAVEREGSPROC,DOEND      ; 71
  3339.     DC.L    FILLEXIT,DOSUPER,FIXUPSTACK,FIXFORSTACK         ; 75
  3340.     DC.L    JOB_SECTION,JOB_AUTOPROC,JOB_OPTCACHE,JOBOUT,JOBOUT          ; 79
  3341.  
  3342.